Get the Clients PID using getsockopt. This is done for security reasons. So
that we dont get any malicious dump requests.

Signed-off-by: Janani Venkataraman <janan...@linux.vnet.ibm.com>
---
 src/coredump.c |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/src/coredump.c b/src/coredump.c
index fadb7cd..599a912 100755
--- a/src/coredump.c
+++ b/src/coredump.c
@@ -22,6 +22,7 @@
  *      Suzuki K. Poulose <suz...@in.ibm.com>
  */
 
+#define _GNU_SOURCE
 #include <stdarg.h>
 #include <stdio.h>
 #include <string.h>
@@ -430,17 +431,38 @@ int receive_core_filename(char *core_file)
        return 0;
 }
 
+/* Get client details */
+int get_client_pid(struct ucred *client_info)
+{
+       socklen_t len = sizeof(struct ucred);
+       if (getsockopt(new_sock, SOL_SOCKET, SO_PEERCRED,
+                               client_info, &len)) {
+               send_reply(errno);
+               gencore_log("[%d]: Can't get credentials of the client:%s\n",
+                               pid_log, strerror(errno));
+               return -1;
+       }
+
+       return 0;
+}
+
 /* Services requests */
 int service_request(void)
 {
        int ret;
        char core_file[CORE_FILE_NAME_SZ];
+       struct ucred client_info;
 
        /* Receive the message */
        ret = receive_core_filename(core_file);
        if (ret)
                goto cleanup;
 
+       /* Fetch client PID */
+       ret = get_client_pid(&client_info);
+       if (ret)
+               goto cleanup;
+
 cleanup:
        close(new_sock);
        if (ret == -1)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to