All of lore.kernel.org
 help / color / mirror / Atom feed
From: riku.voipio@linaro.org
To: qemu-devel@nongnu.org
Cc: peter.maydell@linaro.org, Alex Suykov <alex.suykov@gmail.com>
Subject: [Qemu-devel] [PULL 11/11] linux-user: support target-to-host SCM_CREDENTIALS
Date: Tue, 27 Jan 2015 23:07:22 +0200	[thread overview]
Message-ID: <30b8b68eb574fd68060eebcc4da790fdfe18d668.1422392096.git.riku.voipio@linaro.org> (raw)
In-Reply-To: <cover.1422392096.git.riku.voipio@linaro.org>

From: Alex Suykov <alex.suykov@gmail.com>

When passing ancillary data through a unix socket, handle
credentials properly instead of doing a simple copy and
issuing a warning.

Signed-off-by: Alex Suykov <alex.suykov@gmail.com>
Signed-off-by: Riku Voipio <riku.voipio@linaro.org>
---
 linux-user/syscall.c | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 683f8cc..d4398b9 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1214,16 +1214,26 @@ static inline abi_long target_to_host_cmsg(struct msghdr *msgh,
         cmsg->cmsg_type = tswap32(target_cmsg->cmsg_type);
         cmsg->cmsg_len = CMSG_LEN(len);
 
-        if (cmsg->cmsg_level != SOL_SOCKET || cmsg->cmsg_type != SCM_RIGHTS) {
-            gemu_log("Unsupported ancillary data: %d/%d\n", cmsg->cmsg_level, cmsg->cmsg_type);
-            memcpy(data, target_data, len);
-        } else {
+        if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
             int *fd = (int *)data;
             int *target_fd = (int *)target_data;
             int i, numfds = len / sizeof(int);
 
             for (i = 0; i < numfds; i++)
                 fd[i] = tswap32(target_fd[i]);
+        } else if (cmsg->cmsg_level == SOL_SOCKET
+               &&  cmsg->cmsg_type == SCM_CREDENTIALS) {
+            struct ucred *cred = (struct ucred *)data;
+            struct target_ucred *target_cred =
+                (struct target_ucred *)target_data;
+
+            __put_user(target_cred->pid, &cred->pid);
+            __put_user(target_cred->uid, &cred->uid);
+            __put_user(target_cred->gid, &cred->gid);
+        } else {
+            gemu_log("Unsupported ancillary data: %d/%d\n",
+                                        cmsg->cmsg_level, cmsg->cmsg_type);
+            memcpy(data, target_data, len);
         }
 
         cmsg = CMSG_NXTHDR(msgh, cmsg);
-- 
2.1.4

  parent reply	other threads:[~2015-01-27 21:07 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-27 21:07 [Qemu-devel] [PULL 00/11] linux-user-updates riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 01/11] linux-user/signal.c: Remove current_exec_domain_sig() riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 02/11] linux-user/alpha: Add define for NR_shmat to enable shmat syscall riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 03/11] linux-user/arm/nwfpe: Delete unused aCC array riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 04/11] linux-user/main.c: Call cpu_exec_start/end on all target archs riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 05/11] linux-user/main.c: Mark end_exclusive() as possibly unused riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 06/11] linux-user/signal.c: Remove unnecessary wrapper copy_siginfo_to_user riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 07/11] linux-user: translate resource also for prlimit64 riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 08/11] linux-user: Fix ioctl cmd type mismatch on 64-bit targets riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 09/11] mips64-linux-user: Fix definition of struct sigaltstack riku.voipio
2015-01-27 21:07 ` [Qemu-devel] [PULL 10/11] linux-user: Fix broken m68k signal handling on 64 bit hosts riku.voipio
2015-01-27 21:07 ` riku.voipio [this message]
2015-01-27 23:17 ` [Qemu-devel] [PULL 00/11] linux-user-updates Peter Maydell

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=30b8b68eb574fd68060eebcc4da790fdfe18d668.1422392096.git.riku.voipio@linaro.org \
    --to=riku.voipio@linaro.org \
    --cc=alex.suykov@gmail.com \
    --cc=peter.maydell@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.