lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <1328267483-3225342-1-git-send-email-avagin@openvz.org>
Date:	Fri,  3 Feb 2012 14:11:23 +0300
From:	Andrew Vagin <avagin@...nvz.org>
To:	linux-kernel@...r.kernel.org
Cc:	Oleg Nesterov <oleg@...hat.com>,
	Roland McGrath <roland@...hat.com>,
	Cyrill Gorcunov <gorcunov@...nvz.org>,
	Pavel Emelyanov <xemul@...allels.com>,
	Tejun Heo <tj@...nel.org>, avagin@...nvz.org
Subject: [PATCH] ptrace: add ability to get clear_tid_address

Zero is written at clear_tid_address, when the process exits.
This functionality is used by pthread_join().

sys_set_tid_address() changes this address for current task.

Before this patch clear_tid_address could not be got from user space.
I want to dump a full state of a task, so I need this address.
Also I think it may be useful for debugging a multithreading program.

I am not sure that ptrace is suitable place. It may be added in prctl,
but I think it's a bit useless and strange. I can't image a real
situation (avoid checkpointing) when a thread will want to get own
clear_tid_address from itself, this address is used by parent ussually.

Signed-off-by: Andrew Vagin <avagin@...nvz.org>
---
 include/linux/ptrace.h |    3 +++
 kernel/ptrace.c        |    3 +++
 2 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/include/linux/ptrace.h b/include/linux/ptrace.h
index c2f1f6a..79b84a3 100644
--- a/include/linux/ptrace.h
+++ b/include/linux/ptrace.h
@@ -51,6 +51,9 @@
 #define PTRACE_INTERRUPT	0x4207
 #define PTRACE_LISTEN		0x4208
 
+/* Get clear_child_tid address */
+#define PTRACE_GET_TID_ADDRESS	0x4209
+
 /* flags in @data for PTRACE_SEIZE */
 #define PTRACE_SEIZE_DEVEL	0x80000000 /* temp flag for development */
 
diff --git a/kernel/ptrace.c b/kernel/ptrace.c
index 00ab2ca..ed7fbe7 100644
--- a/kernel/ptrace.c
+++ b/kernel/ptrace.c
@@ -845,6 +845,9 @@ int ptrace_request(struct task_struct *child, long request,
 		break;
 	}
 #endif
+	case PTRACE_GET_TID_ADDRESS:
+		return put_user(child->clear_child_tid, (int __user **) data);
+
 	default:
 		break;
 	}
-- 
1.7.1

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

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ