aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos O'Donell <carlos@redhat.com>2014-02-05 10:10:34 -0500
committerCarlos O'Donell <carlos@redhat.com>2014-02-05 10:13:11 -0500
commitf877c4f2bf2ebc9ecd3e099e33fc4184f4fcac1a (patch)
treeeb68704bb5ec948aff734d878e74cfccd056562d
parentcff469ca41181c67e805eaf7c0a1b518b60fbf10 (diff)
downloadglibc-f877c4f2bf2ebc9ecd3e099e33fc4184f4fcac1a.zip
glibc-f877c4f2bf2ebc9ecd3e099e33fc4184f4fcac1a.tar.gz
glibc-f877c4f2bf2ebc9ecd3e099e33fc4184f4fcac1a.tar.bz2
Fix tst-setgetname for Linux kernels < 2.6.33.
Support for /proc/self/task/$tid/comm as added in Linux 2.6.33, therefore since the test tst-setgetname relies on this functionality to operate we must skip the test in kernels < 2.6.33. We wrap the checks with __ASSUME_PROC_PID_TASK_COMM such that in the future when we move arch_minimum_kernel to 2.6.33 we can remove this code.
-rw-r--r--ChangeLog6
-rw-r--r--nptl/ChangeLog6
-rw-r--r--nptl/sysdeps/unix/sysv/linux/tst-setgetname.c14
-rw-r--r--sysdeps/unix/sysv/linux/kernel-features.h6
4 files changed, 32 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 9c0a003..a75fb0f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-05 Carlos O'Donell <carlos@rehdat.com>
+
+ * sysdeps/unix/sysv/linux/kernel-features.h
+ [__LINUX_KERNEL_VERSION >= 0x020621]
+ (__ASSUME_PROC_PID_TASK_COMM): Define.
+
2014-02-05 Siddhesh Poyarekar <siddhesh@redhat.com>
* manual/contrib.texi: Update entry for Ondrej Bilka, Will
diff --git a/nptl/ChangeLog b/nptl/ChangeLog
index 8761f5b..003e290 100644
--- a/nptl/ChangeLog
+++ b/nptl/ChangeLog
@@ -1,3 +1,9 @@
+2014-02-05 Carlos O'Donell <carlos@redhat.com>
+
+ * sysdeps/unix/sysv/linux/tst-setgetname.c (do_test): Skip the
+ test if !__ASSUME_PROC_PID_TASK_COMM and get_self_comm returns
+ ENOENT.
+
2014-01-23 Stefan Liebler <stli@linux.vnet.ibm.com>
* tst-tls7.c: Adjust testcase timeout
diff --git a/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c b/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c
index 2aceba5..f5693e2 100644
--- a/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c
+++ b/nptl/sysdeps/unix/sysv/linux/tst-setgetname.c
@@ -23,6 +23,7 @@
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
+#include <kernel-features.h>
/* New name of process. */
#define NEW_NAME "setname"
@@ -99,6 +100,19 @@ do_test (int argc, char **argv)
if (res == 0)
{
res = get_self_comm (gettid (), name_check, TASK_COMM_LEN);
+
+#if !__ASSUME_PROC_PID_TASK_COMM
+ /* On this first test we look for ENOENT to be returned from
+ get_self_comm to indicate that the kernel is older than
+ 2.6.33 and doesn't contain comm within the proc structure.
+ In that case we skip the entire test. */
+ if (res == ENOENT)
+ {
+ printf ("SKIP: The kernel does not have /proc/self/task/%%lu/comm.\n");
+ return 0;
+ }
+#endif
+
if (res == 0)
{
if (strncmp (name, name_check, strlen (BIG_NAME)) == 0)
diff --git a/sysdeps/unix/sysv/linux/kernel-features.h b/sysdeps/unix/sysv/linux/kernel-features.h
index 3723535..aabf69d 100644
--- a/sysdeps/unix/sysv/linux/kernel-features.h
+++ b/sysdeps/unix/sysv/linux/kernel-features.h
@@ -202,6 +202,12 @@
# define __ASSUME_RECVMMSG 1
#endif
+/* Support for /proc/self/task/$tid/comm and /proc/$pid/task/$tid/comm were
+ added in 2.6.33. */
+#if __LINUX_KERNEL_VERSION >= 0x020621
+# define __ASSUME_PROC_PID_TASK_COMM 1
+#endif
+
/* statfs fills in f_flags since 2.6.36. */
#if __LINUX_KERNEL_VERSION >= 0x020624
# define __ASSUME_STATFS_F_FLAGS 1