Loading include/linux/skbuff.h +10 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ #include <net/flow_dissector.h> #include <linux/splice.h> #include <linux/in6.h> #include <linux/if_packet.h> #include <net/flow.h> /* The interface for checksum offload between the stack and networking drivers Loading Loading @@ -881,6 +882,15 @@ static inline struct rtable *skb_rtable(const struct sk_buff *skb) return (struct rtable *)skb_dst(skb); } /* For mangling skb->pkt_type from user space side from applications * such as nft, tc, etc, we only allow a conservative subset of * possible pkt_types to be set. */ static inline bool skb_pkt_type_ok(u32 ptype) { return ptype <= PACKET_OTHERHOST; } void kfree_skb(struct sk_buff *skb); void kfree_skb_list(struct sk_buff *segs); void skb_tx_error(struct sk_buff *skb); Loading net/netfilter/nft_meta.c +1 −8 Original line number Diff line number Diff line Loading @@ -199,13 +199,6 @@ void nft_meta_get_eval(const struct nft_expr *expr, } EXPORT_SYMBOL_GPL(nft_meta_get_eval); /* don't change or set _LOOPBACK, _USER, etc. */ static bool pkt_type_ok(u32 p) { return p == PACKET_HOST || p == PACKET_BROADCAST || p == PACKET_MULTICAST || p == PACKET_OTHERHOST; } void nft_meta_set_eval(const struct nft_expr *expr, struct nft_regs *regs, const struct nft_pktinfo *pkt) Loading @@ -223,7 +216,7 @@ void nft_meta_set_eval(const struct nft_expr *expr, break; case NFT_META_PKTTYPE: if (skb->pkt_type != value && pkt_type_ok(value) && pkt_type_ok(skb->pkt_type)) skb_pkt_type_ok(value) && skb_pkt_type_ok(skb->pkt_type)) skb->pkt_type = value; break; case NFT_META_NFTRACE: Loading Loading
include/linux/skbuff.h +10 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,7 @@ #include <net/flow_dissector.h> #include <linux/splice.h> #include <linux/in6.h> #include <linux/if_packet.h> #include <net/flow.h> /* The interface for checksum offload between the stack and networking drivers Loading Loading @@ -881,6 +882,15 @@ static inline struct rtable *skb_rtable(const struct sk_buff *skb) return (struct rtable *)skb_dst(skb); } /* For mangling skb->pkt_type from user space side from applications * such as nft, tc, etc, we only allow a conservative subset of * possible pkt_types to be set. */ static inline bool skb_pkt_type_ok(u32 ptype) { return ptype <= PACKET_OTHERHOST; } void kfree_skb(struct sk_buff *skb); void kfree_skb_list(struct sk_buff *segs); void skb_tx_error(struct sk_buff *skb); Loading
net/netfilter/nft_meta.c +1 −8 Original line number Diff line number Diff line Loading @@ -199,13 +199,6 @@ void nft_meta_get_eval(const struct nft_expr *expr, } EXPORT_SYMBOL_GPL(nft_meta_get_eval); /* don't change or set _LOOPBACK, _USER, etc. */ static bool pkt_type_ok(u32 p) { return p == PACKET_HOST || p == PACKET_BROADCAST || p == PACKET_MULTICAST || p == PACKET_OTHERHOST; } void nft_meta_set_eval(const struct nft_expr *expr, struct nft_regs *regs, const struct nft_pktinfo *pkt) Loading @@ -223,7 +216,7 @@ void nft_meta_set_eval(const struct nft_expr *expr, break; case NFT_META_PKTTYPE: if (skb->pkt_type != value && pkt_type_ok(value) && pkt_type_ok(skb->pkt_type)) skb_pkt_type_ok(value) && skb_pkt_type_ok(skb->pkt_type)) skb->pkt_type = value; break; case NFT_META_NFTRACE: Loading