diff options
Diffstat (limited to 'net/netfilter/xt_osf.c')
| -rw-r--r-- | net/netfilter/xt_osf.c | 24 | 
1 files changed, 10 insertions, 14 deletions
diff --git a/net/netfilter/xt_osf.c b/net/netfilter/xt_osf.c index 4327e101c04..c529161cdbf 100644 --- a/net/netfilter/xt_osf.c +++ b/net/netfilter/xt_osf.c @@ -13,8 +13,7 @@   * GNU General Public License for more details.   *   * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * along with this program; if not, see <http://www.gnu.org/licenses/>.   */  #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt  #include <linux/module.h> @@ -62,13 +61,6 @@ static const struct nla_policy xt_osf_policy[OSF_ATTR_MAX + 1] = {  	[OSF_ATTR_FINGER]	= { .len = sizeof(struct xt_osf_user_finger) },  }; -static void xt_osf_finger_free_rcu(struct rcu_head *rcu_head) -{ -	struct xt_osf_finger *f = container_of(rcu_head, struct xt_osf_finger, rcu_head); - -	kfree(f); -} -  static int xt_osf_add_callback(struct sock *ctnl, struct sk_buff *skb,  			       const struct nlmsghdr *nlh,  			       const struct nlattr * const osf_attrs[]) @@ -133,7 +125,7 @@ static int xt_osf_remove_callback(struct sock *ctnl, struct sk_buff *skb,  		 * We are protected by nfnl mutex.  		 */  		list_del_rcu(&sf->finger_entry); -		call_rcu(&sf->rcu_head, xt_osf_finger_free_rcu); +		kfree_rcu(sf, rcu_head);  		err = 0;  		break; @@ -208,6 +200,7 @@ xt_osf_match_packet(const struct sk_buff *skb, struct xt_action_param *p)  	unsigned char opts[MAX_IPOPTLEN];  	const struct xt_osf_finger *kf;  	const struct xt_osf_user_finger *f; +	struct net *net = dev_net(p->in ? p->in : p->out);  	if (!info)  		return false; @@ -276,7 +269,7 @@ xt_osf_match_packet(const struct sk_buff *skb, struct xt_action_param *p)  						mss <<= 8;  						mss |= optp[2]; -						mss = ntohs(mss); +						mss = ntohs((__force __be16)mss);  						break;  					case OSFOPT_TS:  						loop_cont = 1; @@ -332,7 +325,7 @@ xt_osf_match_packet(const struct sk_buff *skb, struct xt_action_param *p)  			fcount++;  			if (info->flags & XT_OSF_LOG) -				nf_log_packet(p->family, p->hooknum, skb, +				nf_log_packet(net, p->family, p->hooknum, skb,  					p->in, p->out, NULL,  					"%s [%s:%s] : %pI4:%d -> %pI4:%d hops=%d\n",  					f->genre, f->version, f->subtype, @@ -348,7 +341,8 @@ xt_osf_match_packet(const struct sk_buff *skb, struct xt_action_param *p)  	rcu_read_unlock();  	if (!fcount && (info->flags & XT_OSF_LOG)) -		nf_log_packet(p->family, p->hooknum, skb, p->in, p->out, NULL, +		nf_log_packet(net, p->family, p->hooknum, skb, p->in, +			      p->out, NULL,  			"Remote OS is not known: %pI4:%u -> %pI4:%u\n",  				&ip->saddr, ntohs(tcp->source),  				&ip->daddr, ntohs(tcp->dest)); @@ -414,7 +408,7 @@ static void __exit xt_osf_fini(void)  		list_for_each_entry_rcu(f, &xt_osf_fingers[i], finger_entry) {  			list_del_rcu(&f->finger_entry); -			call_rcu(&f->rcu_head, xt_osf_finger_free_rcu); +			kfree_rcu(f, rcu_head);  		}  	}  	rcu_read_unlock(); @@ -428,4 +422,6 @@ module_exit(xt_osf_fini);  MODULE_LICENSE("GPL");  MODULE_AUTHOR("Evgeniy Polyakov <zbr@ioremap.net>");  MODULE_DESCRIPTION("Passive OS fingerprint matching."); +MODULE_ALIAS("ipt_osf"); +MODULE_ALIAS("ip6t_osf");  MODULE_ALIAS_NFNL_SUBSYS(NFNL_SUBSYS_OSF);  | 
