Date: Sat, 31 May 2003 17:05:40 -0700 (PDT) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 32244 for review Message-ID: <200306010005.h5105eLF058502@repoman.freebsd.org>
index | next in thread | raw e-mail
http://perforce.freebsd.org/chv.cgi?CH=32244 Change 32244 by marcel@marcel_nfs on 2003/05/31 17:05:33 IFC @32243 Affected files ... .. //depot/projects/ia64/sys/amd64/amd64/amd64-gdbstub.c#2 integrate .. //depot/projects/ia64/sys/amd64/amd64/db_trace.c#2 integrate .. //depot/projects/ia64/sys/amd64/amd64/nexus.c#4 integrate .. //depot/projects/ia64/sys/kern/sysv_ipc.c#6 integrate Differences ... ==== //depot/projects/ia64/sys/amd64/amd64/amd64-gdbstub.c#2 (text+ko) ==== @@ -92,7 +92,7 @@ * ****************************************************************************/ -/* $FreeBSD: src/sys/amd64/amd64/amd64-gdbstub.c,v 1.23 2003/05/30 01:02:52 peter Exp $ */ +/* $FreeBSD: src/sys/amd64/amd64/amd64-gdbstub.c,v 1.24 2003/05/31 22:00:57 peter Exp $ */ #include <sys/param.h> #include <sys/reboot.h> @@ -120,11 +120,8 @@ nasty interactions between app code and the stub (for instance if user steps into strlen, etc..) */ -#define strlen gdb_strlen -#define strcpy gdb_strcpy - static int -strlen (const char *s) +gdb_strlen (const char *s) { const char *s1 = s; @@ -134,7 +131,7 @@ } static char * -strcpy (char *dst, const char *src) +gdb_strcpy (char *dst, const char *src) { char *retval = dst; @@ -223,7 +220,7 @@ /* remove sequence chars from buffer */ - count = strlen (buffer); + count = gdb_strlen (buffer); for (i=3; i <= count; i++) buffer[i-3] = buffer[i]; } @@ -512,7 +509,7 @@ case 'G': /* set the value of the CPU registers - return OK */ hex2mem (&remcomInBuffer[1], (vm_offset_t)®isters, NUMREGBYTES); - strcpy (remcomOutBuffer, "OK"); + gdb_strcpy (remcomOutBuffer, "OK"); break; case 'P': /* Set the value of one register */ @@ -526,10 +523,10 @@ && regno < NUM_REGS) { hex2mem (ptr, (vm_offset_t)®isters + regno * 4, 4); - strcpy(remcomOutBuffer,"OK"); + gdb_strcpy(remcomOutBuffer,"OK"); } else - strcpy (remcomOutBuffer, "P01"); + gdb_strcpy (remcomOutBuffer, "P01"); break; } case 'm': /* mAA..AA,LLLL Read LLLL bytes at address AA..AA */ @@ -542,11 +539,11 @@ && hexToInt (&ptr, &length)) { if (mem2hex((vm_offset_t) addr, remcomOutBuffer, length) == NULL) - strcpy (remcomOutBuffer, "E03"); + gdb_strcpy (remcomOutBuffer, "E03"); break; } else - strcpy (remcomOutBuffer, "E01"); + gdb_strcpy (remcomOutBuffer, "E01"); break; case 'M': /* MAA..AA,LLLL: Write LLLL bytes at address AA.AA return OK */ @@ -561,12 +558,12 @@ && *(ptr++) == ':') { if (hex2mem(ptr, (vm_offset_t) addr, length) == NULL) - strcpy (remcomOutBuffer, "E03"); + gdb_strcpy (remcomOutBuffer, "E03"); else - strcpy (remcomOutBuffer, "OK"); + gdb_strcpy (remcomOutBuffer, "OK"); } else - strcpy (remcomOutBuffer, "E02"); + gdb_strcpy (remcomOutBuffer, "E02"); break; /* cAA..AA Continue at address AA..AA(optional) */ ==== //depot/projects/ia64/sys/amd64/amd64/db_trace.c#2 (text+ko) ==== @@ -23,7 +23,7 @@ * any improvements or extensions that they make and grant Carnegie the * rights to redistribute these changes. * - * $FreeBSD: src/sys/amd64/amd64/db_trace.c,v 1.56 2003/05/30 01:01:07 peter Exp $ + * $FreeBSD: src/sys/amd64/amd64/db_trace.c,v 1.57 2003/05/31 22:02:11 peter Exp $ */ #include <sys/param.h> @@ -567,7 +567,7 @@ case DBREG_DR7_WRONLY: case DBREG_DR7_RDWR: break; - default : return (-1); break; + default : return (-1); } /* @@ -577,7 +577,7 @@ case 1 : mask = 0x00; break; case 2 : mask = 0x01 << 2; break; case 4 : mask = 0x03 << 2; break; - default : return (-1); break; + default : return (-1); } mask |= access; ==== //depot/projects/ia64/sys/amd64/amd64/nexus.c#4 (text+ko) ==== @@ -26,7 +26,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD: src/sys/amd64/amd64/nexus.c,v 1.52 2003/05/23 05:04:53 peter Exp $ + * $FreeBSD: src/sys/amd64/amd64/nexus.c,v 1.53 2003/05/31 21:58:55 peter Exp $ */ /* @@ -411,7 +411,6 @@ nexus_setup_intr(device_t bus, device_t child, struct resource *irq, int flags, void (*ihand)(void *), void *arg, void **cookiep) { - driver_t *driver; int error; /* somebody tried to setup an irq that failed to allocate! */ @@ -422,8 +421,6 @@ if ((irq->r_flags & RF_SHAREABLE) == 0) flags |= INTR_EXCL; - driver = device_get_driver(child); - /* * We depend here on rman_activate_resource() being idempotent. */ ==== //depot/projects/ia64/sys/kern/sysv_ipc.c#6 (text+ko) ==== @@ -1,4 +1,4 @@ -/* $FreeBSD: src/sys/kern/sysv_ipc.c,v 1.24 2003/01/13 23:04:31 dillon Exp $ */ +/* $FreeBSD: src/sys/kern/sysv_ipc.c,v 1.26 2003/05/31 23:31:51 rwatson Exp $ */ /* $NetBSD: sysv_ipc.c,v 1.7 1994/06/29 06:33:11 cgd Exp $ */ /* @@ -76,21 +76,41 @@ int mode; { struct ucred *cred = td->td_ucred; + int error; - /* Check for user match. */ if (cred->cr_uid != perm->cuid && cred->cr_uid != perm->uid) { - if (mode & IPC_M) - return (suser(td) == 0 ? 0 : EPERM); - /* Check for group match. */ + /* + * For a non-create/owner, we require privilege to + * modify the object protections. Note: some other + * implementations permit IPC_M to be delegated to + * unprivileged non-creator/owner uids/gids. + */ + if (mode & IPC_M) { + error = suser(td); + if (error) + return (error); + } + /* + * Try to match against creator/owner group; if not, fall + * back on other. + */ mode >>= 3; if (!groupmember(perm->gid, cred) && !groupmember(perm->cgid, cred)) - /* Check for `other' match. */ mode >>= 3; + } else { + /* + * Always permit the creator/owner to update the object + * protections regardless of whether the object mode + * permits it. + */ + if (mode & IPC_M) + return (0); } - if (mode & IPC_M) - return (0); - return ((mode & perm->mode) == mode || - suser(td) == 0 ? 0 : EACCES); + if ((mode & perm->mode) != mode) { + if (suser(td) != 0) + return (EACCES); + } + return (0); }help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200306010005.h5105eLF058502>
