summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorswallace <swallace@FreeBSD.org>1996-12-17 19:52:25 +0000
committerswallace <swallace@FreeBSD.org>1996-12-17 19:52:25 +0000
commitb1c7666d3ff2a20b439ed338746001a84a91637c (patch)
treefb3a68532e62bb1491165337d431cd6f296af263
parent8ab072dc79ebe3fa2ccfe38a7ac95db301a6930b (diff)
downloadFreeBSD-src-b1c7666d3ff2a20b439ed338746001a84a91637c.zip
FreeBSD-src-b1c7666d3ff2a20b439ed338746001a84a91637c.tar.gz
In the IBCS2 semctl system call, the last parameter arg is passed by
value, but in the FreeBSD semctl system call implementation, is passed by reference. Submitted by: msagre@cactus.fi.uba.ar <Miguel Angel Sagreras>
-rw-r--r--sys/i386/ibcs2/ibcs2_ipc.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/sys/i386/ibcs2/ibcs2_ipc.c b/sys/i386/ibcs2/ibcs2_ipc.c
index 778b8dc..93b7c22 100644
--- a/sys/i386/ibcs2/ibcs2_ipc.c
+++ b/sys/i386/ibcs2/ibcs2_ipc.c
@@ -21,6 +21,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $Id: $
*/
#include <sys/param.h>
@@ -66,6 +68,8 @@
#define IBCS2_IPC_RMID 0
#define IBCS2_IPC_SET 1
#define IBCS2_IPC_STAT 2
+#define IBCS2_SETVAL 8
+
static void cvt_msqid2imsqid __P((struct msqid_ds *, struct ibcs2_msqid_ds *));
@@ -273,7 +277,18 @@ ibcs2_semsys(p, uap, retval)
SCARG(uap, a5) = (int)sp;
return semsys(p, (struct semsys_args *)uap, retval);
}
+ case IBCS2_SETVAL:
+ {
+ union semun *sp;
+ caddr_t sg = stackgap_init();
+
+ sp = stackgap_alloc(&sg, sizeof(*sp));
+ sp->val = (int) SCARG(uap, a5);
+ SCARG(uap, a5) = (int)sp;
+ return semsys(p, (struct semsys_args *)uap, retval);
+ }
}
+
return semsys(p, (struct semsys_args *)uap, retval);
case 1: /* semget */
@@ -375,6 +390,7 @@ ibcs2_shmsys(p, uap, retval)
return shmsys(p, (struct shmsys_args *)uap, retval);
}
}
+
return shmsys(p, (struct shmsys_args *)uap, retval);
case 2: /* shmdt */
OpenPOWER on IntegriCloud