NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

lib/53273: sem_init() with pshared=1 does not actually work

>Number:         53273
>Category:       lib
>Synopsis:       sem_init() with pshared=1 does not actually work
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    lib-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Thu May 10 02:45:00 +0000 2018
>Originator:     SODA Noriyuki
>Release:        NetBSD 7.1.2
the NetBSD project
System: NetBSD alec 7.1.2 NetBSD 7.1.2 (GENERIC.201803151611Z) amd64
Architecture: x86_64
Machine: amd64

if sem_t is created by sem_init(*, 1, *), the sem_t has to be sharable
between processes, even if the processes don't share virtual memory space.
but our implemention doesn't satisfy this requirement.


maya@ found this problem by trying to enable the multi-process feature
of recent firefox.


change the definition of sem_t from an opaque pointer to an actual struct
just like other UNIXes.

Solaris 9:
typedef struct {
	/* this structure must be the same as sema_t in <synch.h> */
	uint32_t	sem_count;	/* semaphore count */
	uint16_t	sem_type;
	uint16_t	sem_magic;
	upad64_t	sem_pad1[3];	/* reserved for a mutex_t */
	upad64_t 	sem_pad2[2];	/* reserved for a cond_t */
}	sem_t;

struct _sem {
	__uint32_t	_magic;
	struct _usem2	_kern;
	__uint32_t	_padding;	/* Preserve structure size */
typedef	struct _sem	sem_t;

typedef union
  char __size[__SIZEOF_SEM_T];
  long int __align;
} sem_t;

 -current has same problem, too

Home | Main Index | Thread Index | Old Index