diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/audit.c | 25 | ||||
| -rw-r--r-- | kernel/exit.c | 3 | ||||
| -rw-r--r-- | kernel/fork.c | 1 | ||||
| -rw-r--r-- | kernel/taskstats.c | 4 |
4 files changed, 18 insertions, 15 deletions
diff --git a/kernel/audit.c b/kernel/audit.c index 511488a7bc71..4d0ceede3319 100644 --- a/kernel/audit.c +++ b/kernel/audit.c | |||
| @@ -88,11 +88,11 @@ static int audit_failure = AUDIT_FAIL_PRINTK; | |||
| 88 | 88 | ||
| 89 | /* | 89 | /* |
| 90 | * If audit records are to be written to the netlink socket, audit_pid | 90 | * If audit records are to be written to the netlink socket, audit_pid |
| 91 | * contains the pid of the auditd process and audit_nlk_pid contains | 91 | * contains the pid of the auditd process and audit_nlk_portid contains |
| 92 | * the pid to use to send netlink messages to that process. | 92 | * the portid to use to send netlink messages to that process. |
| 93 | */ | 93 | */ |
| 94 | int audit_pid; | 94 | int audit_pid; |
| 95 | static int audit_nlk_pid; | 95 | static int audit_nlk_portid; |
| 96 | 96 | ||
| 97 | /* If audit_rate_limit is non-zero, limit the rate of sending audit records | 97 | /* If audit_rate_limit is non-zero, limit the rate of sending audit records |
| 98 | * to that number per second. This prevents DoS attacks, but results in | 98 | * to that number per second. This prevents DoS attacks, but results in |
| @@ -402,7 +402,7 @@ static void kauditd_send_skb(struct sk_buff *skb) | |||
| 402 | int err; | 402 | int err; |
| 403 | /* take a reference in case we can't send it and we want to hold it */ | 403 | /* take a reference in case we can't send it and we want to hold it */ |
| 404 | skb_get(skb); | 404 | skb_get(skb); |
| 405 | err = netlink_unicast(audit_sock, skb, audit_nlk_pid, 0); | 405 | err = netlink_unicast(audit_sock, skb, audit_nlk_portid, 0); |
| 406 | if (err < 0) { | 406 | if (err < 0) { |
| 407 | BUG_ON(err != -ECONNREFUSED); /* Shouldn't happen */ | 407 | BUG_ON(err != -ECONNREFUSED); /* Shouldn't happen */ |
| 408 | printk(KERN_ERR "audit: *NO* daemon at audit_pid=%d\n", audit_pid); | 408 | printk(KERN_ERR "audit: *NO* daemon at audit_pid=%d\n", audit_pid); |
| @@ -679,7 +679,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 679 | status_set.backlog_limit = audit_backlog_limit; | 679 | status_set.backlog_limit = audit_backlog_limit; |
| 680 | status_set.lost = atomic_read(&audit_lost); | 680 | status_set.lost = atomic_read(&audit_lost); |
| 681 | status_set.backlog = skb_queue_len(&audit_skb_queue); | 681 | status_set.backlog = skb_queue_len(&audit_skb_queue); |
| 682 | audit_send_reply(NETLINK_CB(skb).pid, seq, AUDIT_GET, 0, 0, | 682 | audit_send_reply(NETLINK_CB(skb).portid, seq, AUDIT_GET, 0, 0, |
| 683 | &status_set, sizeof(status_set)); | 683 | &status_set, sizeof(status_set)); |
| 684 | break; | 684 | break; |
| 685 | case AUDIT_SET: | 685 | case AUDIT_SET: |
| @@ -707,7 +707,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 707 | sessionid, sid, 1); | 707 | sessionid, sid, 1); |
| 708 | 708 | ||
| 709 | audit_pid = new_pid; | 709 | audit_pid = new_pid; |
| 710 | audit_nlk_pid = NETLINK_CB(skb).pid; | 710 | audit_nlk_portid = NETLINK_CB(skb).portid; |
| 711 | } | 711 | } |
| 712 | if (status_get->mask & AUDIT_STATUS_RATE_LIMIT) { | 712 | if (status_get->mask & AUDIT_STATUS_RATE_LIMIT) { |
| 713 | err = audit_set_rate_limit(status_get->rate_limit, | 713 | err = audit_set_rate_limit(status_get->rate_limit, |
| @@ -750,7 +750,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 750 | size--; | 750 | size--; |
| 751 | audit_log_n_untrustedstring(ab, data, size); | 751 | audit_log_n_untrustedstring(ab, data, size); |
| 752 | } | 752 | } |
| 753 | audit_set_pid(ab, NETLINK_CB(skb).pid); | 753 | audit_set_pid(ab, NETLINK_CB(skb).portid); |
| 754 | audit_log_end(ab); | 754 | audit_log_end(ab); |
| 755 | } | 755 | } |
| 756 | break; | 756 | break; |
| @@ -769,7 +769,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 769 | } | 769 | } |
| 770 | /* fallthrough */ | 770 | /* fallthrough */ |
| 771 | case AUDIT_LIST: | 771 | case AUDIT_LIST: |
| 772 | err = audit_receive_filter(msg_type, NETLINK_CB(skb).pid, | 772 | err = audit_receive_filter(msg_type, NETLINK_CB(skb).portid, |
| 773 | seq, data, nlmsg_len(nlh), | 773 | seq, data, nlmsg_len(nlh), |
| 774 | loginuid, sessionid, sid); | 774 | loginuid, sessionid, sid); |
| 775 | break; | 775 | break; |
| @@ -788,7 +788,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 788 | } | 788 | } |
| 789 | /* fallthrough */ | 789 | /* fallthrough */ |
| 790 | case AUDIT_LIST_RULES: | 790 | case AUDIT_LIST_RULES: |
| 791 | err = audit_receive_filter(msg_type, NETLINK_CB(skb).pid, | 791 | err = audit_receive_filter(msg_type, NETLINK_CB(skb).portid, |
| 792 | seq, data, nlmsg_len(nlh), | 792 | seq, data, nlmsg_len(nlh), |
| 793 | loginuid, sessionid, sid); | 793 | loginuid, sessionid, sid); |
| 794 | break; | 794 | break; |
| @@ -859,7 +859,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 859 | memcpy(sig_data->ctx, ctx, len); | 859 | memcpy(sig_data->ctx, ctx, len); |
| 860 | security_release_secctx(ctx, len); | 860 | security_release_secctx(ctx, len); |
| 861 | } | 861 | } |
| 862 | audit_send_reply(NETLINK_CB(skb).pid, seq, AUDIT_SIGNAL_INFO, | 862 | audit_send_reply(NETLINK_CB(skb).portid, seq, AUDIT_SIGNAL_INFO, |
| 863 | 0, 0, sig_data, sizeof(*sig_data) + len); | 863 | 0, 0, sig_data, sizeof(*sig_data) + len); |
| 864 | kfree(sig_data); | 864 | kfree(sig_data); |
| 865 | break; | 865 | break; |
| @@ -871,7 +871,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) | |||
| 871 | s.enabled = tsk->signal->audit_tty != 0; | 871 | s.enabled = tsk->signal->audit_tty != 0; |
| 872 | spin_unlock_irq(&tsk->sighand->siglock); | 872 | spin_unlock_irq(&tsk->sighand->siglock); |
| 873 | 873 | ||
| 874 | audit_send_reply(NETLINK_CB(skb).pid, seq, | 874 | audit_send_reply(NETLINK_CB(skb).portid, seq, |
| 875 | AUDIT_TTY_GET, 0, 0, &s, sizeof(s)); | 875 | AUDIT_TTY_GET, 0, 0, &s, sizeof(s)); |
| 876 | break; | 876 | break; |
| 877 | } | 877 | } |
| @@ -946,8 +946,7 @@ static int __init audit_init(void) | |||
| 946 | 946 | ||
| 947 | printk(KERN_INFO "audit: initializing netlink socket (%s)\n", | 947 | printk(KERN_INFO "audit: initializing netlink socket (%s)\n", |
| 948 | audit_default ? "enabled" : "disabled"); | 948 | audit_default ? "enabled" : "disabled"); |
| 949 | audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, | 949 | audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, &cfg); |
| 950 | THIS_MODULE, &cfg); | ||
| 951 | if (!audit_sock) | 950 | if (!audit_sock) |
| 952 | audit_panic("cannot initialize netlink socket"); | 951 | audit_panic("cannot initialize netlink socket"); |
| 953 | else | 952 | else |
diff --git a/kernel/exit.c b/kernel/exit.c index f65345f9e5bb..42f25952edd9 100644 --- a/kernel/exit.c +++ b/kernel/exit.c | |||
| @@ -1046,6 +1046,9 @@ void do_exit(long code) | |||
| 1046 | if (tsk->splice_pipe) | 1046 | if (tsk->splice_pipe) |
| 1047 | __free_pipe_info(tsk->splice_pipe); | 1047 | __free_pipe_info(tsk->splice_pipe); |
| 1048 | 1048 | ||
| 1049 | if (tsk->task_frag.page) | ||
| 1050 | put_page(tsk->task_frag.page); | ||
| 1051 | |||
| 1049 | validate_creds_for_do_exit(tsk); | 1052 | validate_creds_for_do_exit(tsk); |
| 1050 | 1053 | ||
| 1051 | preempt_disable(); | 1054 | preempt_disable(); |
diff --git a/kernel/fork.c b/kernel/fork.c index 5a0e74d89a5a..a2b1efc20928 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
| @@ -330,6 +330,7 @@ static struct task_struct *dup_task_struct(struct task_struct *orig) | |||
| 330 | tsk->btrace_seq = 0; | 330 | tsk->btrace_seq = 0; |
| 331 | #endif | 331 | #endif |
| 332 | tsk->splice_pipe = NULL; | 332 | tsk->splice_pipe = NULL; |
| 333 | tsk->task_frag.page = NULL; | ||
| 333 | 334 | ||
| 334 | account_kernel_stack(ti, 1); | 335 | account_kernel_stack(ti, 1); |
| 335 | 336 | ||
diff --git a/kernel/taskstats.c b/kernel/taskstats.c index 3880df2acf05..5eab1f3edfa5 100644 --- a/kernel/taskstats.c +++ b/kernel/taskstats.c | |||
| @@ -476,7 +476,7 @@ static int cmd_attr_register_cpumask(struct genl_info *info) | |||
| 476 | rc = parse(info->attrs[TASKSTATS_CMD_ATTR_REGISTER_CPUMASK], mask); | 476 | rc = parse(info->attrs[TASKSTATS_CMD_ATTR_REGISTER_CPUMASK], mask); |
| 477 | if (rc < 0) | 477 | if (rc < 0) |
| 478 | goto out; | 478 | goto out; |
| 479 | rc = add_del_listener(info->snd_pid, mask, REGISTER); | 479 | rc = add_del_listener(info->snd_portid, mask, REGISTER); |
| 480 | out: | 480 | out: |
| 481 | free_cpumask_var(mask); | 481 | free_cpumask_var(mask); |
| 482 | return rc; | 482 | return rc; |
| @@ -492,7 +492,7 @@ static int cmd_attr_deregister_cpumask(struct genl_info *info) | |||
| 492 | rc = parse(info->attrs[TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK], mask); | 492 | rc = parse(info->attrs[TASKSTATS_CMD_ATTR_DEREGISTER_CPUMASK], mask); |
| 493 | if (rc < 0) | 493 | if (rc < 0) |
| 494 | goto out; | 494 | goto out; |
| 495 | rc = add_del_listener(info->snd_pid, mask, DEREGISTER); | 495 | rc = add_del_listener(info->snd_portid, mask, DEREGISTER); |
| 496 | out: | 496 | out: |
| 497 | free_cpumask_var(mask); | 497 | free_cpumask_var(mask); |
| 498 | return rc; | 498 | return rc; |
