mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
netfilter: propagate net to nf_bridge_get_physindev
[ Upstream commit a54e72197037d2c9bfcd70dddaac8c8ccb5b41ba ] This is a preparation patch for replacing physindev with physinif on nf_bridge_info structure. We will use dev_get_by_index_rcu to resolve device, when needed, and it requires net to be available. Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com> Reviewed-by: Simon Horman <horms@kernel.org> Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org> Stable-dep-of: 9874808878d9 ("netfilter: bridge: replace physindev with physinif in nf_bridge_info") Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
3f1f505277
commit
754ca18ed3
@@ -56,7 +56,7 @@ static inline int nf_bridge_get_physoutif(const struct sk_buff *skb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline struct net_device *
|
static inline struct net_device *
|
||||||
nf_bridge_get_physindev(const struct sk_buff *skb)
|
nf_bridge_get_physindev(const struct sk_buff *skb, struct net *net)
|
||||||
{
|
{
|
||||||
const struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
|
const struct nf_bridge_info *nf_bridge = nf_bridge_info_get(skb);
|
||||||
|
|
||||||
|
|||||||
@@ -288,7 +288,7 @@ void nf_send_reset(struct net *net, struct sock *sk, struct sk_buff *oldskb,
|
|||||||
* build the eth header using the original destination's MAC as the
|
* build the eth header using the original destination's MAC as the
|
||||||
* source, and send the RST packet directly.
|
* source, and send the RST packet directly.
|
||||||
*/
|
*/
|
||||||
br_indev = nf_bridge_get_physindev(oldskb);
|
br_indev = nf_bridge_get_physindev(oldskb, net);
|
||||||
if (br_indev) {
|
if (br_indev) {
|
||||||
struct ethhdr *oeth = eth_hdr(oldskb);
|
struct ethhdr *oeth = eth_hdr(oldskb);
|
||||||
|
|
||||||
|
|||||||
@@ -353,7 +353,7 @@ void nf_send_reset6(struct net *net, struct sock *sk, struct sk_buff *oldskb,
|
|||||||
* build the eth header using the original destination's MAC as the
|
* build the eth header using the original destination's MAC as the
|
||||||
* source, and send the RST packet directly.
|
* source, and send the RST packet directly.
|
||||||
*/
|
*/
|
||||||
br_indev = nf_bridge_get_physindev(oldskb);
|
br_indev = nf_bridge_get_physindev(oldskb, net);
|
||||||
if (br_indev) {
|
if (br_indev) {
|
||||||
struct ethhdr *oeth = eth_hdr(oldskb);
|
struct ethhdr *oeth = eth_hdr(oldskb);
|
||||||
|
|
||||||
|
|||||||
@@ -138,9 +138,9 @@ hash_netiface4_data_next(struct hash_netiface4_elem *next,
|
|||||||
#include "ip_set_hash_gen.h"
|
#include "ip_set_hash_gen.h"
|
||||||
|
|
||||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||||
static const char *get_physindev_name(const struct sk_buff *skb)
|
static const char *get_physindev_name(const struct sk_buff *skb, struct net *net)
|
||||||
{
|
{
|
||||||
struct net_device *dev = nf_bridge_get_physindev(skb);
|
struct net_device *dev = nf_bridge_get_physindev(skb, net);
|
||||||
|
|
||||||
return dev ? dev->name : NULL;
|
return dev ? dev->name : NULL;
|
||||||
}
|
}
|
||||||
@@ -177,7 +177,7 @@ hash_netiface4_kadt(struct ip_set *set, const struct sk_buff *skb,
|
|||||||
|
|
||||||
if (opt->cmdflags & IPSET_FLAG_PHYSDEV) {
|
if (opt->cmdflags & IPSET_FLAG_PHYSDEV) {
|
||||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||||
const char *eiface = SRCDIR ? get_physindev_name(skb) :
|
const char *eiface = SRCDIR ? get_physindev_name(skb, xt_net(par)) :
|
||||||
get_physoutdev_name(skb);
|
get_physoutdev_name(skb);
|
||||||
|
|
||||||
if (!eiface)
|
if (!eiface)
|
||||||
@@ -395,7 +395,7 @@ hash_netiface6_kadt(struct ip_set *set, const struct sk_buff *skb,
|
|||||||
|
|
||||||
if (opt->cmdflags & IPSET_FLAG_PHYSDEV) {
|
if (opt->cmdflags & IPSET_FLAG_PHYSDEV) {
|
||||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||||
const char *eiface = SRCDIR ? get_physindev_name(skb) :
|
const char *eiface = SRCDIR ? get_physindev_name(skb, xt_net(par)) :
|
||||||
get_physoutdev_name(skb);
|
get_physoutdev_name(skb);
|
||||||
|
|
||||||
if (!eiface)
|
if (!eiface)
|
||||||
|
|||||||
@@ -111,7 +111,8 @@ nf_log_dump_packet_common(struct nf_log_buf *m, u8 pf,
|
|||||||
unsigned int hooknum, const struct sk_buff *skb,
|
unsigned int hooknum, const struct sk_buff *skb,
|
||||||
const struct net_device *in,
|
const struct net_device *in,
|
||||||
const struct net_device *out,
|
const struct net_device *out,
|
||||||
const struct nf_loginfo *loginfo, const char *prefix)
|
const struct nf_loginfo *loginfo, const char *prefix,
|
||||||
|
struct net *net)
|
||||||
{
|
{
|
||||||
const struct net_device *physoutdev __maybe_unused;
|
const struct net_device *physoutdev __maybe_unused;
|
||||||
const struct net_device *physindev __maybe_unused;
|
const struct net_device *physindev __maybe_unused;
|
||||||
@@ -121,7 +122,7 @@ nf_log_dump_packet_common(struct nf_log_buf *m, u8 pf,
|
|||||||
in ? in->name : "",
|
in ? in->name : "",
|
||||||
out ? out->name : "");
|
out ? out->name : "");
|
||||||
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
|
||||||
physindev = nf_bridge_get_physindev(skb);
|
physindev = nf_bridge_get_physindev(skb, net);
|
||||||
if (physindev && in != physindev)
|
if (physindev && in != physindev)
|
||||||
nf_log_buf_add(m, "PHYSIN=%s ", physindev->name);
|
nf_log_buf_add(m, "PHYSIN=%s ", physindev->name);
|
||||||
physoutdev = nf_bridge_get_physoutdev(skb);
|
physoutdev = nf_bridge_get_physoutdev(skb);
|
||||||
@@ -148,7 +149,7 @@ static void nf_log_arp_packet(struct net *net, u_int8_t pf,
|
|||||||
loginfo = &default_loginfo;
|
loginfo = &default_loginfo;
|
||||||
|
|
||||||
nf_log_dump_packet_common(m, pf, hooknum, skb, in, out, loginfo,
|
nf_log_dump_packet_common(m, pf, hooknum, skb, in, out, loginfo,
|
||||||
prefix);
|
prefix, net);
|
||||||
dump_arp_packet(m, loginfo, skb, skb_network_offset(skb));
|
dump_arp_packet(m, loginfo, skb, skb_network_offset(skb));
|
||||||
|
|
||||||
nf_log_buf_close(m);
|
nf_log_buf_close(m);
|
||||||
@@ -845,7 +846,7 @@ static void nf_log_ip_packet(struct net *net, u_int8_t pf,
|
|||||||
loginfo = &default_loginfo;
|
loginfo = &default_loginfo;
|
||||||
|
|
||||||
nf_log_dump_packet_common(m, pf, hooknum, skb, in,
|
nf_log_dump_packet_common(m, pf, hooknum, skb, in,
|
||||||
out, loginfo, prefix);
|
out, loginfo, prefix, net);
|
||||||
|
|
||||||
if (in)
|
if (in)
|
||||||
dump_mac_header(m, loginfo, skb);
|
dump_mac_header(m, loginfo, skb);
|
||||||
@@ -880,7 +881,7 @@ static void nf_log_ip6_packet(struct net *net, u_int8_t pf,
|
|||||||
loginfo = &default_loginfo;
|
loginfo = &default_loginfo;
|
||||||
|
|
||||||
nf_log_dump_packet_common(m, pf, hooknum, skb, in, out,
|
nf_log_dump_packet_common(m, pf, hooknum, skb, in, out,
|
||||||
loginfo, prefix);
|
loginfo, prefix, net);
|
||||||
|
|
||||||
if (in)
|
if (in)
|
||||||
dump_mac_header(m, loginfo, skb);
|
dump_mac_header(m, loginfo, skb);
|
||||||
@@ -916,7 +917,7 @@ static void nf_log_unknown_packet(struct net *net, u_int8_t pf,
|
|||||||
loginfo = &default_loginfo;
|
loginfo = &default_loginfo;
|
||||||
|
|
||||||
nf_log_dump_packet_common(m, pf, hooknum, skb, in, out, loginfo,
|
nf_log_dump_packet_common(m, pf, hooknum, skb, in, out, loginfo,
|
||||||
prefix);
|
prefix, net);
|
||||||
|
|
||||||
dump_mac_header(m, loginfo, skb);
|
dump_mac_header(m, loginfo, skb);
|
||||||
|
|
||||||
|
|||||||
@@ -84,7 +84,7 @@ static void __nf_queue_entry_init_physdevs(struct nf_queue_entry *entry)
|
|||||||
const struct sk_buff *skb = entry->skb;
|
const struct sk_buff *skb = entry->skb;
|
||||||
|
|
||||||
if (nf_bridge_info_exists(skb)) {
|
if (nf_bridge_info_exists(skb)) {
|
||||||
entry->physin = nf_bridge_get_physindev(skb);
|
entry->physin = nf_bridge_get_physindev(skb, entry->state.net);
|
||||||
entry->physout = nf_bridge_get_physoutdev(skb);
|
entry->physout = nf_bridge_get_physoutdev(skb);
|
||||||
} else {
|
} else {
|
||||||
entry->physin = NULL;
|
entry->physin = NULL;
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ physdev_mt(const struct sk_buff *skb, struct xt_action_param *par)
|
|||||||
(!!outdev ^ !(info->invert & XT_PHYSDEV_OP_BRIDGED)))
|
(!!outdev ^ !(info->invert & XT_PHYSDEV_OP_BRIDGED)))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
physdev = nf_bridge_get_physindev(skb);
|
physdev = nf_bridge_get_physindev(skb, xt_net(par));
|
||||||
indev = physdev ? physdev->name : NULL;
|
indev = physdev ? physdev->name : NULL;
|
||||||
|
|
||||||
if ((info->bitmask & XT_PHYSDEV_OP_ISIN &&
|
if ((info->bitmask & XT_PHYSDEV_OP_ISIN &&
|
||||||
|
|||||||
Reference in New Issue
Block a user