Current-Users archive

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

Re: sem_init: pshared=0 difference between Linux and NetBSD



Valery Ushakov <uwe%stderr.spb.ru@localhost> writes:

>> I think the NetBSD behavior is a bug.
>
> Well, it would be nice to get a standalone test case to begin with.

Sure.  Perhaps create a non-shared, fork, and then have the child and
parent use the sem to interact.

> But if we are into exgetics, I'd note that posix text makes a
> distinction.  Shared as a property of a semaphore, and the fact that a
> process can access it are not the same.  To summarize the relevant
> paragraph:
>
>   1: the [shared] semaphore is shared between processes;
>   2: in this case, any process that can access the semaphore sem
>   3: can use sem for performing sem_*() operations.
>
> A process can access a semaphore sem (2) that is _not_ shared (1,
> negated), but in that case it can _not_ (3, negated) use the semaphore
> operations.

Yes, it's a bit messy.  I'd argue any attempted access to the non-shared
semaphore by another process is an error.  If it's the defined call,
then I think the semaphone needs to be non-broken and the access
rejected.  If it's a memory write, we're into UB.

> The fix in libgpg-error moves around the time the post-syscall hook is
> called and I suspect gpg was (indirectly, b/c its hook was called at
> the wrong time) doing something like the above, i.e. "using
> operations" on a semaphore that it "has access to", but that is not
> really shared.

If so, seems totally fair upstream to fix to avoid erroneous accesses.



Home | Main Index | Thread Index | Old Index