use proper netlink_dump_control.done and .module to avoid panic.

Signed-off-by: Gao feng <[email protected]>
---
 net/xfrm/xfrm_user.c |   12 ++++++++----
 1 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index 289f4bf..852339d 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -867,7 +867,7 @@ static int xfrm_dump_sa_done(struct netlink_callback *cb)
 {
        struct xfrm_state_walk *walk = (struct xfrm_state_walk *) &cb->args[1];
        xfrm_state_walk_done(walk);
-       return 0;
+       return netlink_dump_done(cb);
 }
 
 static int xfrm_dump_sa(struct sk_buff *skb, struct netlink_callback *cb)
@@ -1538,7 +1538,7 @@ static int xfrm_dump_policy_done(struct netlink_callback 
*cb)
        struct xfrm_policy_walk *walk = (struct xfrm_policy_walk *) 
&cb->args[1];
 
        xfrm_policy_walk_done(walk);
-       return 0;
+       return netlink_dump_done(cb);
 }
 
 static int xfrm_dump_policy(struct sk_buff *skb, struct netlink_callback *cb)
@@ -2308,17 +2308,20 @@ static struct xfrm_link {
        int (*doit)(struct sk_buff *, struct nlmsghdr *, struct nlattr **);
        int (*dump)(struct sk_buff *, struct netlink_callback *);
        int (*done)(struct netlink_callback *);
+       struct module *module;
 } xfrm_dispatch[XFRM_NR_MSGTYPES] = {
        [XFRM_MSG_NEWSA       - XFRM_MSG_BASE] = { .doit = xfrm_add_sa        },
        [XFRM_MSG_DELSA       - XFRM_MSG_BASE] = { .doit = xfrm_del_sa        },
        [XFRM_MSG_GETSA       - XFRM_MSG_BASE] = { .doit = xfrm_get_sa,
                                                   .dump = xfrm_dump_sa,
-                                                  .done = xfrm_dump_sa_done  },
+                                                  .done = xfrm_dump_sa_done,
+                                                  .module = THIS_MODULE      },
        [XFRM_MSG_NEWPOLICY   - XFRM_MSG_BASE] = { .doit = xfrm_add_policy    },
        [XFRM_MSG_DELPOLICY   - XFRM_MSG_BASE] = { .doit = xfrm_get_policy    },
        [XFRM_MSG_GETPOLICY   - XFRM_MSG_BASE] = { .doit = xfrm_get_policy,
                                                   .dump = xfrm_dump_policy,
-                                                  .done = 
xfrm_dump_policy_done },
+                                                  .done = 
xfrm_dump_policy_done,
+                                                  .module = THIS_MODULE      },
        [XFRM_MSG_ALLOCSPI    - XFRM_MSG_BASE] = { .doit = xfrm_alloc_userspi },
        [XFRM_MSG_ACQUIRE     - XFRM_MSG_BASE] = { .doit = xfrm_add_acquire   },
        [XFRM_MSG_EXPIRE      - XFRM_MSG_BASE] = { .doit = xfrm_add_sa_expire },
@@ -2362,6 +2365,7 @@ static int xfrm_user_rcv_msg(struct sk_buff *skb, struct 
nlmsghdr *nlh)
                        struct netlink_dump_control c = {
                                .dump = link->dump,
                                .done = link->done,
+                               .module = link->module,
                        };
                        return netlink_dump_start(net->xfrm.nlsk, skb, nlh, &c);
                }
-- 
1.7.7.6

--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to