aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/socket.h
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-04-19 15:32:32 +0000
committerBen Hutchings <ben@decadent.org.uk>2013-04-25 20:25:43 +0100
commit5428146ebea24b916eb9e3684449699cb6a5c8c0 (patch)
tree121f695e25fb2f5be431e4edafaa29fa3fe681b9 /include/linux/socket.h
parentffe1341edbe2878134f3083625d5c916670d0fca (diff)
downloadkernel_samsung_smdk4412-5428146ebea24b916eb9e3684449699cb6a5c8c0.zip
kernel_samsung_smdk4412-5428146ebea24b916eb9e3684449699cb6a5c8c0.tar.gz
kernel_samsung_smdk4412-5428146ebea24b916eb9e3684449699cb6a5c8c0.tar.bz2
net: fix incorrect credentials passing
commit 83f1b4ba917db5dc5a061a44b3403ddb6e783494 upstream. Commit 257b5358b32f ("scm: Capture the full credentials of the scm sender") changed the credentials passing code to pass in the effective uid/gid instead of the real uid/gid. Obviously this doesn't matter most of the time (since normally they are the same), but it results in differences for suid binaries when the wrong uid/gid ends up being used. This just undoes that (presumably unintentional) part of the commit. Reported-by: Andy Lutomirski <luto@amacapital.net> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: Serge E. Hallyn <serge@hallyn.com> Cc: David S. Miller <davem@davemloft.net> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Acked-by: "Eric W. Biederman" <ebiederm@xmission.com> Signed-off-by: David S. Miller <davem@davemloft.net> [bwh: Backported to 3.2: scm_set_cred() does user namespace conversion of euid/egid using cred_to_ucred(). Add and use cred_real_to_ucred() to do the same thing for real uid/gid.] Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Diffstat (limited to 'include/linux/socket.h')
-rw-r--r--include/linux/socket.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/include/linux/socket.h b/include/linux/socket.h
index ad919e0..2acd2e2 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -317,6 +317,7 @@ struct ucred {
#define IPX_TYPE 1
extern void cred_to_ucred(struct pid *pid, const struct cred *cred, struct ucred *ucred);
+extern void cred_real_to_ucred(struct pid *pid, const struct cred *cred, struct ucred *ucred);
extern int memcpy_fromiovec(unsigned char *kdata, struct iovec *iov, int len);
extern int memcpy_fromiovecend(unsigned char *kdata, const struct iovec *iov,