diff options
author | des <des@FreeBSD.org> | 2001-12-09 00:35:30 +0000 |
---|---|---|
committer | des <des@FreeBSD.org> | 2001-12-09 00:35:30 +0000 |
commit | 2a99d8ecbaa3d51a61ed77d7ffd60401f8ed86de (patch) | |
tree | eb35c4c9ad69e80fad36220f88e5b1bd798c4b2e /sys | |
parent | b2e2ac1d06e2dcb67ebcc9b142d19245362fa869 (diff) | |
download | FreeBSD-src-2a99d8ecbaa3d51a61ed77d7ffd60401f8ed86de.zip FreeBSD-src-2a99d8ecbaa3d51a61ed77d7ffd60401f8ed86de.tar.gz |
Fix various bugs in the debugging code and reenable it.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/fs/procfs/procfs.c | 2 | ||||
-rw-r--r-- | sys/fs/procfs/procfs_ioctl.c | 16 |
2 files changed, 9 insertions, 9 deletions
diff --git a/sys/fs/procfs/procfs.c b/sys/fs/procfs/procfs.c index 18544d0..76c128f 100644 --- a/sys/fs/procfs/procfs.c +++ b/sys/fs/procfs/procfs.c @@ -163,10 +163,8 @@ procfs_init(PFS_INIT_ARGS) NULL, &procfs_notsystem, PFS_RD); node = pfs_create_file(dir, "mem", &procfs_doprocmem, &procfs_attr, &procfs_candebug, PFS_RDWR|PFS_RAW); -#ifdef PROCFS_DEBUG node->pn_ioctl = &procfs_ioctl; node->pn_close = &procfs_close; -#endif pfs_create_file(dir, "note", &procfs_doprocnote, &procfs_attr, &procfs_candebug, PFS_WR); pfs_create_file(dir, "notepg", &procfs_doprocnote, diff --git a/sys/fs/procfs/procfs_ioctl.c b/sys/fs/procfs/procfs_ioctl.c index b5cec14..6055eee 100644 --- a/sys/fs/procfs/procfs_ioctl.c +++ b/sys/fs/procfs/procfs_ioctl.c @@ -39,7 +39,6 @@ #include <fs/pseudofs/pseudofs.h> #include <fs/procfs/procfs.h> -#ifdef PROCFS_DEBUG /* * Process ioctls */ @@ -47,7 +46,7 @@ int procfs_ioctl(PFS_IOCTL_ARGS) { struct procfs_status *ps; - int error, sig; + int error, flags, sig; PROC_LOCK(p); error = 0; @@ -59,10 +58,13 @@ procfs_ioctl(PFS_IOCTL_ARGS) p->p_stops &= ~*(unsigned int *)data; break; case PIOCSFL: - /* ignore */ + flags = *(unsigned int *)data; + if (flags & PF_ISUGID && (error = suser(td->td_proc)) != 0) + break; + p->p_pfsflags = flags; break; case PIOCGFL: - *(unsigned int *)data = 0; /* nope */ + *(unsigned int *)data = p->p_pfsflags; break; case PIOCWAIT: while (p->p_step == 0) { @@ -82,10 +84,10 @@ procfs_ioctl(PFS_IOCTL_ARGS) ps->val = p->p_step ? p->p_xstat : 0; break; case PIOCCONT: - if (p->p_step) + if (p->p_step == 0) break; sig = *(int *)data; - if (!_SIG_VALID(sig)) { + if (sig != 0 && !_SIG_VALID(sig)) { error = EINVAL; break; } @@ -104,6 +106,7 @@ procfs_ioctl(PFS_IOCTL_ARGS) #else if (sig) psignal(p, sig); + p->p_step = 0; wakeup(&p->p_step); #endif break; @@ -129,4 +132,3 @@ procfs_close(PFS_CLOSE_ARGS) } return (0); } -#endif |