diff options
| author | Garance A Drosehn <gad@FreeBSD.org> | 2004-03-25 23:19:16 +0000 |
|---|---|---|
| committer | Garance A Drosehn <gad@FreeBSD.org> | 2004-03-25 23:19:16 +0000 |
| commit | 998c10ebd965b271fc01c3e2d8d0c59424a53915 (patch) | |
| tree | 578bf6c4ef12d501a9f442fe2d8bbd1bdb1835c5 /usr.bin/pkill/pkill.c | |
| parent | 69fd9fbfbc2e29d42938ea7643ef9026a3043f47 (diff) | |
Notes
Diffstat (limited to 'usr.bin/pkill/pkill.c')
| -rw-r--r-- | usr.bin/pkill/pkill.c | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/usr.bin/pkill/pkill.c b/usr.bin/pkill/pkill.c index 45087ade6699..6a83cceeb5d2 100644 --- a/usr.bin/pkill/pkill.c +++ b/usr.bin/pkill/pkill.c @@ -125,7 +125,7 @@ main(int argc, char **argv) extern int optind; char buf[_POSIX2_LINE_MAX], *mstr, **pargv, *p, *q; char *execf, *coref, *swapf; - int i, j, ch, bestidx, rv, criteria; + int i, j, ch, bestidx, rv, criteria, drop_privs; void (*action)(struct kinfo_proc *); struct kinfo_proc *kp; struct list *li; @@ -169,13 +169,22 @@ main(int argc, char **argv) #endif criteria = 0; + drop_privs = 0; - while ((ch = getopt(argc, argv, "G:P:U:d:fg:lns:t:u:vx")) != -1) + while ((ch = getopt(argc, argv, "G:M:N:P:U:d:fg:lns:t:u:vx")) != -1) switch (ch) { case 'G': makelist(&rgidlist, LT_GROUP, optarg); criteria = 1; break; + case 'M': + coref = optarg; + drop_privs = 1; + break; + case 'N': + execf = optarg; + drop_privs = 1; + break; case 'P': makelist(&ppidlist, LT_GENERIC, optarg); criteria = 1; @@ -235,6 +244,15 @@ main(int argc, char **argv) if (!criteria) usage(); + /* + * Discard privileges if not the running kernel so that bad + * guys can't print interesting stuff from kernel memory. + */ + if (drop_privs) { + setgid(getgid()); + setuid(getuid()); + } + mypid = getpid(); /* @@ -426,9 +444,9 @@ usage(void) ustr = "[-signal] [-fnvx]"; fprintf(stderr, - "usage: %s %s [-G gid] [-P ppid] [-U uid] [-g pgrp] [-s sid]\n" - " [-t tty] [-u euid] pattern ...\n", getprogname(), - ustr); + "usage: %s %s [-G gid] [-M core] [-N system]\n" + " [-P ppid] [-U uid] [-g pgrp] [-s sid] [-t tty]\n" + " [-u euid] pattern ...\n", getprogname(), ustr); exit(STATUS_ERROR); } |
