Message ID | 20250408142425.95437-2-ericwouds@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Add nf_flow_encap_push() for xmit direct | expand |
On Tue, Apr 08, 2025 at 04:24:24PM +0200, Eric Woudstra wrote: > Jakub Kicinski suggested following patch: > > W=1 C=1 GCC build gives us: > > net/bridge/netfilter/nf_conntrack_bridge.c: note: in included file (through > ../include/linux/if_pppox.h, ../include/uapi/linux/netfilter_bridge.h, > ../include/linux/netfilter_bridge.h): include/uapi/linux/if_pppox.h: > 153:29: warning: array of flexible structures > > It doesn't like that hdr has a zero-length array which overlaps proto. > The kernel code doesn't currently need those arrays. > > PPPoE connection is functional after applying this patch. > > Reviewed-by: Nikolay Aleksandrov <razor@blackwall.org> > Signed-off-by: Eric Woudstra <ericwouds@gmail.com> Reviewed-by: Kees Cook <kees@kernel.org>
diff --git a/drivers/net/ppp/pppoe.c b/drivers/net/ppp/pppoe.c index 68e631718ab0..17946af6a8cf 100644 --- a/drivers/net/ppp/pppoe.c +++ b/drivers/net/ppp/pppoe.c @@ -882,7 +882,7 @@ static int pppoe_sendmsg(struct socket *sock, struct msghdr *m, skb->protocol = cpu_to_be16(ETH_P_PPP_SES); ph = skb_put(skb, total_len + sizeof(struct pppoe_hdr)); - start = (char *)&ph->tag[0]; + start = (char *)ph + sizeof(*ph); error = memcpy_from_msg(start, m, total_len); if (error < 0) { diff --git a/include/uapi/linux/if_pppox.h b/include/uapi/linux/if_pppox.h index 9abd80dcc46f..29b804aa7474 100644 --- a/include/uapi/linux/if_pppox.h +++ b/include/uapi/linux/if_pppox.h @@ -122,7 +122,9 @@ struct sockaddr_pppol2tpv3in6 { struct pppoe_tag { __be16 tag_type; __be16 tag_len; +#ifndef __KERNEL__ char tag_data[]; +#endif } __attribute__ ((packed)); /* Tag identifiers */ @@ -150,7 +152,9 @@ struct pppoe_hdr { __u8 code; __be16 sid; __be16 length; +#ifndef __KERNEL__ struct pppoe_tag tag[]; +#endif } __packed; /* Length of entire PPPoE + PPP header */