Bug 19313 - Wrong __cpu_mask for x32
Summary: Wrong __cpu_mask for x32
Status: RESOLVED FIXED
Alias: None
Product: glibc
Classification: Unclassified
Component: nptl (show other bugs)
Version: 2.23
: P2 normal
Target Milestone: 2.23
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-11-30 18:41 UTC by H.J. Lu
Modified: 2015-12-01 18:27 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:
fweimer: security-


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description H.J. Lu 2015-11-30 18:41:38 UTC
Since x86-64 and x32 use the same set of sched_XXX system call interface:

[hjl@gnu-6 linux-stable]$ grep sched_ arch/x86/entry/syscalls/syscall_64.tbl 
24	common	sched_yield		sys_sched_yield
142	common	sched_setparam		sys_sched_setparam
143	common	sched_getparam		sys_sched_getparam
144	common	sched_setscheduler	sys_sched_setscheduler
145	common	sched_getscheduler	sys_sched_getscheduler
146	common	sched_get_priority_max	sys_sched_get_priority_max
147	common	sched_get_priority_min	sys_sched_get_priority_min
148	common	sched_rr_get_interval	sys_sched_rr_get_interval
203	common	sched_setaffinity	sys_sched_setaffinity
204	common	sched_getaffinity	sys_sched_getaffinity
314	common	sched_setattr		sys_sched_setattr
315	common	sched_getattr		sys_sched_getattr
[hjl@gnu-6 linux-stable]$ 

__cpu_mask should be __syscall_ulong_t for x86-64 and x32.  Using

typedef unsigned long int __cpu_mask;

leads to

FAIL: nptl/tst-thread-affinity-pthread
FAIL: nptl/tst-thread-affinity-pthread2
FAIL: nptl/tst-thread-affinity-sched
FAIL: posix/tst-affinity
FAIL: posix/tst-affinity-pid
Comment 1 H.J. Lu 2015-12-01 18:27:09 UTC
Fixed.
Comment 2 Sourceware Commits 2015-12-01 18:27:12 UTC
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".

The branch, master has been updated
       via  7635a88d320c665defd44085d3b9031d673fe1ee (commit)
      from  c960ded0d552ee20ea4688a5442dd75440355886 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=7635a88d320c665defd44085d3b9031d673fe1ee

commit 7635a88d320c665defd44085d3b9031d673fe1ee
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Tue Dec 1 10:25:44 2015 -0800

    Add __CPU_MASK_TYPE for __cpu_mask
    
    Since x86-64 and x32 use the same set of sched_XXX system call interface:
    
    [hjl@gnu-6 linux-stable]$ grep sched_
    arch/x86/entry/syscalls/syscall_64.tbl
    24	common	sched_yield		sys_sched_yield
    142	common	sched_setparam		sys_sched_setparam
    143	common	sched_getparam		sys_sched_getparam
    144	common	sched_setscheduler	sys_sched_setscheduler
    145	common	sched_getscheduler	sys_sched_getscheduler
    146	common	sched_get_priority_max	sys_sched_get_priority_max
    147	common	sched_get_priority_min	sys_sched_get_priority_min
    148	common	sched_rr_get_interval	sys_sched_rr_get_interval
    203	common	sched_setaffinity	sys_sched_setaffinity
    204	common	sched_getaffinity	sys_sched_getaffinity
    314	common	sched_setattr		sys_sched_setattr
    315	common	sched_getattr		sys_sched_getattr
    [hjl@gnu-6 linux-stable]$
    
    __cpu_mask should be unsigned long long, instead of unsigned long, for
    x32.  This patch adds __CPU_MASK_TYPE so that each architecture can
    define the proper type for __cpu_mask.
    
    	[BZ #19313]
    	* bits/typesizes.h (__CPU_MASK_TYPE): New.
    	* sysdeps/mach/hurd/bits/typesizes.h (__CPU_MASK_TYPE): Likewise.
    	* sysdeps/nacl/bits/typesizes.h (__CPU_MASK_TYPE): Likewise.
    	* sysdeps/unix/sysv/linux/alpha/bits/typesizes.h (__CPU_MASK_TYPE):
    	Likewise.
    	* sysdeps/unix/sysv/linux/generic/bits/typesizes.h (__CPU_MASK_TYPE):
    	Likewise.
    	* sysdeps/unix/sysv/linux/s390/bits/typesizes.h (__CPU_MASK_TYPE):
    	Likewise.
    	* sysdeps/unix/sysv/linux/sparc/bits/typesizes.h (__CPU_MASK_TYPE):
    	Likewise.
    	* sysdeps/unix/sysv/linux/x86/bits/typesizes.h (__CPU_MASK_TYPE):
    	* sysdeps/unix/sysv/linux/bits/sched.h (__cpu_mask): Replace
    	unsigned long int with __CPU_MASK_TYPE.

-----------------------------------------------------------------------

Summary of changes:
 ChangeLog                                        |   18 ++++++++++++++++++
 bits/typesizes.h                                 |    1 +
 sysdeps/mach/hurd/bits/typesizes.h               |    1 +
 sysdeps/nacl/bits/typesizes.h                    |    1 +
 sysdeps/unix/sysv/linux/alpha/bits/typesizes.h   |    1 +
 sysdeps/unix/sysv/linux/bits/sched.h             |    2 +-
 sysdeps/unix/sysv/linux/generic/bits/typesizes.h |    1 +
 sysdeps/unix/sysv/linux/s390/bits/typesizes.h    |    1 +
 sysdeps/unix/sysv/linux/sparc/bits/typesizes.h   |    1 +
 sysdeps/unix/sysv/linux/x86/bits/typesizes.h     |    1 +
 10 files changed, 27 insertions(+), 1 deletions(-)