]> err.no Git - linux-2.6/blobdiff - net/sctp/protocol.c
tipc: Fix skb_under_panic when configuring TIPC without privileges
[linux-2.6] / net / sctp / protocol.c
index 067c8a1658d6fbf0872129baeb07ba0f0d7656d6..b8bd9e014498fe9d0af9cd8a4cbf44676d4e86da 100644 (file)
@@ -113,6 +113,8 @@ static __init int sctp_proc_init(void)
                goto out_nomem;
        if (sctp_assocs_proc_init())
                goto out_nomem;
+       if (sctp_remaddr_proc_init())
+               goto out_nomem;
 
        return 0;
 
@@ -129,6 +131,7 @@ static void sctp_proc_exit(void)
        sctp_snmp_proc_exit();
        sctp_eps_proc_exit();
        sctp_assocs_proc_exit();
+       sctp_remaddr_proc_exit();
 
        if (proc_net_sctp) {
                proc_net_sctp = NULL;
@@ -650,7 +653,9 @@ static int sctp_inetaddr_event(struct notifier_block *this, unsigned long ev,
                spin_lock_bh(&sctp_local_addr_lock);
                list_for_each_entry_safe(addr, temp,
                                        &sctp_local_addr_list, list) {
-                       if (addr->a.v4.sin_addr.s_addr == ifa->ifa_local) {
+                       if (addr->a.sa.sa_family == AF_INET &&
+                                       addr->a.v4.sin_addr.s_addr ==
+                                       ifa->ifa_local) {
                                found = 1;
                                addr->valid = 0;
                                list_del_rcu(&addr->list);
@@ -972,24 +977,14 @@ int sctp_register_pf(struct sctp_pf *pf, sa_family_t family)
        return 1;
 }
 
-static int __init init_sctp_mibs(void)
+static inline int init_sctp_mibs(void)
 {
-       sctp_statistics[0] = alloc_percpu(struct sctp_mib);
-       if (!sctp_statistics[0])
-               return -ENOMEM;
-       sctp_statistics[1] = alloc_percpu(struct sctp_mib);
-       if (!sctp_statistics[1]) {
-               free_percpu(sctp_statistics[0]);
-               return -ENOMEM;
-       }
-       return 0;
-
+       return snmp_mib_init((void**)sctp_statistics, sizeof(struct sctp_mib));
 }
 
-static void cleanup_sctp_mibs(void)
+static inline void cleanup_sctp_mibs(void)
 {
-       free_percpu(sctp_statistics[0]);
-       free_percpu(sctp_statistics[1]);
+       snmp_mib_free((void**)sctp_statistics);
 }
 
 static void sctp_v4_pf_init(void)