diff options
Diffstat (limited to 'net/core')
| -rw-r--r-- | net/core/dev.c | 8 | ||||
| -rw-r--r-- | net/core/scm.c | 10 |
2 files changed, 12 insertions, 6 deletions
diff --git a/net/core/dev.c b/net/core/dev.c index 9174c77d3112..89912ae6de65 100644 --- a/net/core/dev.c +++ b/net/core/dev.c | |||
| @@ -2961,6 +2961,8 @@ static void dev_change_rx_flags(struct net_device *dev, int flags) | |||
| 2961 | static int __dev_set_promiscuity(struct net_device *dev, int inc) | 2961 | static int __dev_set_promiscuity(struct net_device *dev, int inc) |
| 2962 | { | 2962 | { |
| 2963 | unsigned short old_flags = dev->flags; | 2963 | unsigned short old_flags = dev->flags; |
| 2964 | uid_t uid; | ||
| 2965 | gid_t gid; | ||
| 2964 | 2966 | ||
| 2965 | ASSERT_RTNL(); | 2967 | ASSERT_RTNL(); |
| 2966 | 2968 | ||
| @@ -2985,15 +2987,17 @@ static int __dev_set_promiscuity(struct net_device *dev, int inc) | |||
| 2985 | printk(KERN_INFO "device %s %s promiscuous mode\n", | 2987 | printk(KERN_INFO "device %s %s promiscuous mode\n", |
| 2986 | dev->name, (dev->flags & IFF_PROMISC) ? "entered" : | 2988 | dev->name, (dev->flags & IFF_PROMISC) ? "entered" : |
| 2987 | "left"); | 2989 | "left"); |
| 2988 | if (audit_enabled) | 2990 | if (audit_enabled) { |
| 2991 | current_uid_gid(&uid, &gid); | ||
| 2989 | audit_log(current->audit_context, GFP_ATOMIC, | 2992 | audit_log(current->audit_context, GFP_ATOMIC, |
| 2990 | AUDIT_ANOM_PROMISCUOUS, | 2993 | AUDIT_ANOM_PROMISCUOUS, |
| 2991 | "dev=%s prom=%d old_prom=%d auid=%u uid=%u gid=%u ses=%u", | 2994 | "dev=%s prom=%d old_prom=%d auid=%u uid=%u gid=%u ses=%u", |
| 2992 | dev->name, (dev->flags & IFF_PROMISC), | 2995 | dev->name, (dev->flags & IFF_PROMISC), |
| 2993 | (old_flags & IFF_PROMISC), | 2996 | (old_flags & IFF_PROMISC), |
| 2994 | audit_get_loginuid(current), | 2997 | audit_get_loginuid(current), |
| 2995 | current->uid, current->gid, | 2998 | uid, gid, |
| 2996 | audit_get_sessionid(current)); | 2999 | audit_get_sessionid(current)); |
| 3000 | } | ||
| 2997 | 3001 | ||
| 2998 | dev_change_rx_flags(dev, IFF_PROMISC); | 3002 | dev_change_rx_flags(dev, IFF_PROMISC); |
| 2999 | } | 3003 | } |
diff --git a/net/core/scm.c b/net/core/scm.c index b12303dd39d9..b7ba91b074b3 100644 --- a/net/core/scm.c +++ b/net/core/scm.c | |||
| @@ -44,11 +44,13 @@ | |||
| 44 | 44 | ||
| 45 | static __inline__ int scm_check_creds(struct ucred *creds) | 45 | static __inline__ int scm_check_creds(struct ucred *creds) |
| 46 | { | 46 | { |
| 47 | const struct cred *cred = current_cred(); | ||
| 48 | |||
| 47 | if ((creds->pid == task_tgid_vnr(current) || capable(CAP_SYS_ADMIN)) && | 49 | if ((creds->pid == task_tgid_vnr(current) || capable(CAP_SYS_ADMIN)) && |
| 48 | ((creds->uid == current->uid || creds->uid == current->euid || | 50 | ((creds->uid == cred->uid || creds->uid == cred->euid || |
| 49 | creds->uid == current->suid) || capable(CAP_SETUID)) && | 51 | creds->uid == cred->suid) || capable(CAP_SETUID)) && |
| 50 | ((creds->gid == current->gid || creds->gid == current->egid || | 52 | ((creds->gid == cred->gid || creds->gid == cred->egid || |
| 51 | creds->gid == current->sgid) || capable(CAP_SETGID))) { | 53 | creds->gid == cred->sgid) || capable(CAP_SETGID))) { |
| 52 | return 0; | 54 | return 0; |
| 53 | } | 55 | } |
| 54 | return -EPERM; | 56 | return -EPERM; |
