The function lowpan_iphc_mcast_ctx_addr_compress() contains two offset errors that break context-based multicast address compression (LOWPAN_IPHC_DAM_00). When compressing the multicast address, the compressed format expects exactly 6 bytes: - Bytes 0-1: Flags, scope, and reserved bits (from s6_addr[1..2]) - Bytes 2-5: The 4-byte Group ID (from s6_addr[12..15]) Currently, the memcpy() operations use incorrect offsets: 1. The destination offset for the Group ID is &data[1] instead of &data[2]. This overwrites the previously copied scope byte. 2. The source offset for the Group ID is &ipaddr->s6_addr[11] instead of &ipaddr->s6_addr[12]. This mismatch results in a corrupted compressed address being transmitted. Consequently, the receiving side fails to reconstruct the original IPv6 address via lowpan_uncompress_multicast_ctx_daddr() since it expects the Group ID to start at data[2]. Fix the logic by correcting both the destination and source offsets so that the 6-byte compressed representation is assembled correctly. Signed-off-by: Quan Sun <2022090917019@std.uestc.edu.cn> --- net/6lowpan/iphc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/net/6lowpan/iphc.c b/net/6lowpan/iphc.c index e116d308a8df6..29ae68ca3ec15 100644 --- a/net/6lowpan/iphc.c +++ b/net/6lowpan/iphc.c @@ -1091,7 +1091,7 @@ static u8 lowpan_iphc_mcast_ctx_addr_compress(u8 **hc_ptr, /* 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; base-commit: 95084f1883a760e0d4290698346759d58e2b944a -- 2.43.0