Skip to content

Commit 52025eb

Browse files
winminummakynes
authored andcommitted
netfilter: nfnetlink_log: fix uninitialized padding leak in NFULA_PAYLOAD
__build_packet_message() manually constructs the NFULA_PAYLOAD netlink attribute using skb_put() and skb_copy_bits(), bypassing the standard nla_reserve()/nla_put() helpers. While nla_total_size(data_len) bytes are allocated (including NLA alignment padding), only data_len bytes of actual packet data are copied. The trailing nla_padlen(data_len) bytes (1-3 when data_len is not 4-byte aligned) are never initialized, leaking stale heap contents to userspace via the NFLOG netlink socket. Replace the manual attribute construction with nla_reserve(), which handles the tailroom check, header setup, and padding zeroing via __nla_reserve(). The subsequent skb_copy_bits() fills in the payload data on top of the properly initialized attribute. Fixes: df6fb86 ("[NETFILTER]: nfnetlink: convert to generic netlink attribute functions") Reported-by: Xiang Mei <[email protected]> Signed-off-by: Weiming Shi <[email protected]> Signed-off-by: Florian Westphal <[email protected]> Signed-off-by: Pablo Neira Ayuso <[email protected]>
1 parent 6caefcd commit 52025eb

1 file changed

Lines changed: 2 additions & 6 deletions

File tree

net/netfilter/nfnetlink_log.c

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -647,15 +647,11 @@ __build_packet_message(struct nfnl_log_net *log,
647647

648648
if (data_len) {
649649
struct nlattr *nla;
650-
int size = nla_attr_size(data_len);
651650

652-
if (skb_tailroom(inst->skb) < nla_total_size(data_len))
651+
nla = nla_reserve(inst->skb, NFULA_PAYLOAD, data_len);
652+
if (!nla)
653653
goto nla_put_failure;
654654

655-
nla = skb_put(inst->skb, nla_total_size(data_len));
656-
nla->nla_type = NFULA_PAYLOAD;
657-
nla->nla_len = size;
658-
659655
if (skb_copy_bits(skb, 0, nla_data(nla), data_len))
660656
BUG();
661657
}

0 commit comments

Comments
 (0)