Date: Sun, 2 Sep 2012 13:53:16 +0000 (UTC) From: Dima Panov <fluffy@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r303548 - in head/news/inn: . files Message-ID: <201209021353.q82DrGat012065@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: fluffy Date: Sun Sep 2 13:53:16 2012 New Revision: 303548 URL: http://svn.freebsd.org/changeset/ports/303548 Log: - Fix innd/nnrpd semget failures Do not set any shmem permission bits except for the six allowed bits PR: 171134 Submitted by: G. Paul Ziemba Added: head/news/inn/files/patch-storage_buffindexed_shmem.c (contents, props changed) Modified: head/news/inn/Makefile (contents, props changed) Modified: head/news/inn/Makefile ============================================================================== --- head/news/inn/Makefile Sun Sep 2 13:08:58 2012 (r303547) +++ head/news/inn/Makefile Sun Sep 2 13:53:16 2012 (r303548) @@ -7,7 +7,7 @@ PORTNAME?= inn PORTVERSION?= 2.5.2 -PORTREVISION?= 2 +PORTREVISION?= 3 CATEGORIES= news ipv6 # Master distribution broken #MASTER_SITES?= ${MASTER_SITE_ISC} Added: head/news/inn/files/patch-storage_buffindexed_shmem.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/news/inn/files/patch-storage_buffindexed_shmem.c Sun Sep 2 13:53:16 2012 (r303548) @@ -0,0 +1,73 @@ +The problem seems to be that unsupported permission bits are being given to semget(2) as in the following snippet (there are several such instances): + +storage/buffindexed/shmem.c: + + id = semget(kt, 2, IPC_CREAT|S_IRWXU|S_IRWXG|S_IRWXO); + +The semget(2) man page does not indicate that the usual file mode bits may be used. Instead, it allows: + + SEM_R Read access for user. + + SEM_A Alter access for user. + + (SEM_R>>3) Read access for group. + + (SEM_A>>3) Alter access for group. + + (SEM_R>>6) Read access for other. + + (SEM_A>>6) Alter access for other. + +The allowed bits correspond to read and write bits of the file mode constants. The execute bit is not among the defined bits for semget. + +The fix: do not set any permission bits except for the six allowed bits. + +Note that the documentation for linux semget differs, and seems to allow but ignore the execute bits. + +Patch attached with submission follows: + +--- storage/buffindexed/shmem.c.orig 2012-08-27 23:39:42.000000000 -0700 ++++ storage/buffindexed/shmem.c 2012-08-27 23:37:50.000000000 -0700 +@@ -26,7 +26,9 @@ + static int smcGetSemaphore(const char *name) + { + key_t kt = ftok( (char *)name, 0 ); +- int id = semget(kt, 0, S_IRWXU|S_IRWXG|S_IRWXO); ++ int perm = SEM_R | SEM_A | (SEM_R>>3) | (SEM_A>>3) | ++ (SEM_R>>6) | (SEM_A>>6); ++ int id = semget(kt, 0, perm); + + if (id < 0) { + syswarn("semget failed to get semaphore for %s", name); +@@ -37,15 +39,17 @@ + static int smcCreateSemaphore(const char *name) + { + key_t kt = ftok( (char *)name, 0 ); +- int id = semget(kt, 2, IPC_CREAT|S_IRWXU|S_IRWXG|S_IRWXO); ++ int perm = SEM_R | SEM_A | (SEM_R>>3) | (SEM_A>>3) | ++ (SEM_R>>6) | (SEM_A>>6); ++ int id = semget(kt, 2, IPC_CREAT|perm); + + if (id < 0) { + if (errno == EACCES || errno == EINVAL) { + /* looks like a wrong semaphore exists. remove it. */ +- id = semget(kt, 0, S_IRWXU|S_IRWXG|S_IRWXO); ++ id = semget(kt, 0, perm); + if (id < 0) { + /* couldn't even retrieve it. */ +- syswarn("cant get semaphore using %s", name); ++ syswarn("cant get semaphore using %s (key=%d)", name, kt); + return id; + } + /* try to remove it */ +@@ -65,7 +69,7 @@ + } + #endif + /* and retry creating it */ +- id = semget(kt, 2, IPC_CREAT|S_IRWXU|S_IRWXG|S_IRWXO); ++ id = semget(kt, 2, IPC_CREAT|perm); + } + } + if (id < 0) + +
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201209021353.q82DrGat012065>