diff options
author | YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@linux-ipv6.org> | 2012-12-12 23:29:36 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-12-13 12:58:11 -0500 |
commit | 7bdc1b4abab3af0a803300f706c9814ef4e20a3e (patch) | |
tree | 6609b090de8aca06d7fb19c374ee3c90917ccd1c /net/ipv6/ndisc.c | |
parent | 499744209b2cbca66c42119226e5470da3bb7040 (diff) |
ndisc: Fix padding error in link-layer address option.
If a natural number n exists where 2 + data_len <= 8n < 2 + data_len + pad,
post padding is not initialized correctly.
(Un)fortunately, the only type that requires pad is Infiniband,
whose pad is 2 and data_len is 20, and this logical error has not
become obvious, but it is better to fix.
Note that ndisc_opt_addr_space() handles the situation described
above correctly.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv6/ndisc.c')
-rw-r--r-- | net/ipv6/ndisc.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c index 4c02e6ab96e7..f2a007b7bde3 100644 --- a/net/ipv6/ndisc.c +++ b/net/ipv6/ndisc.c | |||
@@ -151,8 +151,8 @@ static inline int ndisc_opt_addr_space(struct net_device *dev) | |||
151 | static u8 *ndisc_fill_addr_option(u8 *opt, int type, void *data, int data_len, | 151 | static u8 *ndisc_fill_addr_option(u8 *opt, int type, void *data, int data_len, |
152 | unsigned short addr_type) | 152 | unsigned short addr_type) |
153 | { | 153 | { |
154 | int space = NDISC_OPT_SPACE(data_len); | ||
155 | int pad = ndisc_addr_option_pad(addr_type); | 154 | int pad = ndisc_addr_option_pad(addr_type); |
155 | int space = NDISC_OPT_SPACE(data_len + pad); | ||
156 | 156 | ||
157 | opt[0] = type; | 157 | opt[0] = type; |
158 | opt[1] = space>>3; | 158 | opt[1] = space>>3; |