diff options
Diffstat (limited to 'kernel/audit.c')
-rw-r--r-- | kernel/audit.c | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 1c7f2c61416..4a3f28d2ca6 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
@@ -384,7 +384,7 @@ static void audit_hold_skb(struct sk_buff *skb) | |||
384 | static void audit_printk_skb(struct sk_buff *skb) | 384 | static void audit_printk_skb(struct sk_buff *skb) |
385 | { | 385 | { |
386 | struct nlmsghdr *nlh = nlmsg_hdr(skb); | 386 | struct nlmsghdr *nlh = nlmsg_hdr(skb); |
387 | char *data = NLMSG_DATA(nlh); | 387 | char *data = nlmsg_data(nlh); |
388 | 388 | ||
389 | if (nlh->nlmsg_type != AUDIT_EOE) { | 389 | if (nlh->nlmsg_type != AUDIT_EOE) { |
390 | if (printk_ratelimit()) | 390 | if (printk_ratelimit()) |
@@ -516,14 +516,15 @@ struct sk_buff *audit_make_reply(int pid, int seq, int type, int done, | |||
516 | if (!skb) | 516 | if (!skb) |
517 | return NULL; | 517 | return NULL; |
518 | 518 | ||
519 | nlh = NLMSG_NEW(skb, pid, seq, t, size, flags); | 519 | nlh = nlmsg_put(skb, pid, seq, t, size, flags); |
520 | data = NLMSG_DATA(nlh); | 520 | if (!nlh) |
521 | goto out_kfree_skb; | ||
522 | data = nlmsg_data(nlh); | ||
521 | memcpy(data, payload, size); | 523 | memcpy(data, payload, size); |
522 | return skb; | 524 | return skb; |
523 | 525 | ||
524 | nlmsg_failure: /* Used by NLMSG_NEW */ | 526 | out_kfree_skb: |
525 | if (skb) | 527 | kfree_skb(skb); |
526 | kfree_skb(skb); | ||
527 | return NULL; | 528 | return NULL; |
528 | } | 529 | } |
529 | 530 | ||
@@ -680,7 +681,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
680 | sessionid = audit_get_sessionid(current); | 681 | sessionid = audit_get_sessionid(current); |
681 | security_task_getsecid(current, &sid); | 682 | security_task_getsecid(current, &sid); |
682 | seq = nlh->nlmsg_seq; | 683 | seq = nlh->nlmsg_seq; |
683 | data = NLMSG_DATA(nlh); | 684 | data = nlmsg_data(nlh); |
684 | 685 | ||
685 | switch (msg_type) { | 686 | switch (msg_type) { |
686 | case AUDIT_GET: | 687 | case AUDIT_GET: |
@@ -961,14 +962,17 @@ static void audit_receive(struct sk_buff *skb) | |||
961 | static int __init audit_init(void) | 962 | static int __init audit_init(void) |
962 | { | 963 | { |
963 | int i; | 964 | int i; |
965 | struct netlink_kernel_cfg cfg = { | ||
966 | .input = audit_receive, | ||
967 | }; | ||
964 | 968 | ||
965 | if (audit_initialized == AUDIT_DISABLED) | 969 | if (audit_initialized == AUDIT_DISABLED) |
966 | return 0; | 970 | return 0; |
967 | 971 | ||
968 | printk(KERN_INFO "audit: initializing netlink socket (%s)\n", | 972 | printk(KERN_INFO "audit: initializing netlink socket (%s)\n", |
969 | audit_default ? "enabled" : "disabled"); | 973 | audit_default ? "enabled" : "disabled"); |
970 | audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, 0, | 974 | audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, |
971 | audit_receive, NULL, THIS_MODULE); | 975 | THIS_MODULE, &cfg); |
972 | if (!audit_sock) | 976 | if (!audit_sock) |
973 | audit_panic("cannot initialize netlink socket"); | 977 | audit_panic("cannot initialize netlink socket"); |
974 | else | 978 | else |
@@ -1060,13 +1064,15 @@ static struct audit_buffer * audit_buffer_alloc(struct audit_context *ctx, | |||
1060 | 1064 | ||
1061 | ab->skb = nlmsg_new(AUDIT_BUFSIZ, gfp_mask); | 1065 | ab->skb = nlmsg_new(AUDIT_BUFSIZ, gfp_mask); |
1062 | if (!ab->skb) | 1066 | if (!ab->skb) |
1063 | goto nlmsg_failure; | 1067 | goto err; |
1064 | 1068 | ||
1065 | nlh = NLMSG_NEW(ab->skb, 0, 0, type, 0, 0); | 1069 | nlh = nlmsg_put(ab->skb, 0, 0, type, 0, 0); |
1070 | if (!nlh) | ||
1071 | goto out_kfree_skb; | ||
1066 | 1072 | ||
1067 | return ab; | 1073 | return ab; |
1068 | 1074 | ||
1069 | nlmsg_failure: /* Used by NLMSG_NEW */ | 1075 | out_kfree_skb: |
1070 | kfree_skb(ab->skb); | 1076 | kfree_skb(ab->skb); |
1071 | ab->skb = NULL; | 1077 | ab->skb = NULL; |
1072 | err: | 1078 | err: |