6lowpan: fix off-by-one in multicast context address compression
The second memcpy in lowpan_iphc_mcast_ctx_addr_compress() uses
&data[1] as destination and &ipaddr->s6_addr[11] as source, but
both should be offset by one: &data[2] and &ipaddr->s6_addr[12]
respectively.
This off-by-one has two consequences:
1. data[1] is overwritten with s6_addr[11], corrupting the RIID
field in the compressed multicast address
2. data[5] is never written, so uninitialized kernel stack memory
is transmitted over the network via lowpan_push_hc_data(),
leaking kernel stack contents
The correct inline data layout must match what the decompression
function lowpan_uncompress_multicast_ctx_daddr() expects:
data[0..1] = s6_addr[1..2] (flags/scope + RIID)
data[2..5] = s6_addr[12..15] (group ID)
Also zero-initialize the data array as a defensive measure against
similar bugs in the future.
Fixes: 5609c185f2 ("6lowpan: iphc: add support for stateful compression")
Reported-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
Reported-by: Yuxiang Yang <yangyx22@mails.tsinghua.edu.cn>
Reported-by: Ao Wang <wangao@seu.edu.cn>
Reported-by: Xuewei Feng <fengxw06@126.com>
Reported-by: Qi Li <qli01@tsinghua.edu.cn>
Reported-by: Ke Xu <xuke@tsinghua.edu.cn>
Signed-off-by: Yizhou Zhao <zhaoyz24@mails.tsinghua.edu.cn>
Acked-by: Alexander Aring <aahringo@redhat.com>
Link: https://patch.msgid.link/20260527081806.42747-1-zhaoyz24@mails.tsinghua.edu.cn
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
5057e1aca0
commit
2a58899d11
1 changed files with 2 additions and 2 deletions
|
|
@ -1086,12 +1086,12 @@ static u8 lowpan_iphc_mcast_ctx_addr_compress(u8 **hc_ptr,
|
|||
const struct lowpan_iphc_ctx *ctx,
|
||||
const struct in6_addr *ipaddr)
|
||||
{
|
||||
u8 data[6];
|
||||
u8 data[6] = {};
|
||||
|
||||
/* flags/scope, reserved (RIID) */
|
||||
memcpy(data, &ipaddr->s6_addr[1], 2);
|
||||
/* group ID */
|
||||
memcpy(&data[1], &ipaddr->s6_addr[11], 4);
|
||||
memcpy(&data[2], &ipaddr->s6_addr[12], 4);
|
||||
lowpan_push_hc_data(hc_ptr, data, 6);
|
||||
|
||||
return LOWPAN_IPHC_DAM_00;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue