Date: Fri, 22 Jan 2021 19:40:29 GMT From: Ed Maste <emaste@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 86f33b5fcf60 - main - elfctl: allow features to be specified by value Message-ID: <202101221940.10MJeTcd061452@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=86f33b5fcf6087bf4439881011b920ff99e6e300 commit 86f33b5fcf6087bf4439881011b920ff99e6e300 Author: Ed Maste <emaste@FreeBSD.org> AuthorDate: 2021-01-22 17:22:35 +0000 Commit: Ed Maste <emaste@FreeBSD.org> CommitDate: 2021-01-22 19:38:52 +0000 elfctl: allow features to be specified by value This will allow elfctl on older releases to set bits that are not yet known there, so that the binary will have the correct settings applied if run on a later FreeBSD version. PR: 252629 (related) Suggested by: kib Reviewed by: gbe (manpage, earlier), kib MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D28284 --- usr.bin/elfctl/elfctl.1 | 15 +++++++++++++-- usr.bin/elfctl/elfctl.c | 25 ++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/usr.bin/elfctl/elfctl.1 b/usr.bin/elfctl/elfctl.1 index f93b558fdf0d..23e2dabea49c 100644 --- a/usr.bin/elfctl/elfctl.1 +++ b/usr.bin/elfctl/elfctl.1 @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 12, 2021 +.Dd January 22, 2021 .Dt ELFCTL 1 .Os .Sh NAME @@ -64,7 +64,8 @@ to turn on the features, to turn off the features, .Dq Li = to only turn on the given features. -A comma separated list of feature names follows the operation. +A comma separated list of feature names or numeric values follows the +operation. .El .Pp If @@ -86,6 +87,16 @@ command: elfctl file elfctl -e +aslr file .Ed +.Pp +Features may be specified as numerical values: +.Bd -literal -offset -indent +elfctl -e =0x0001,0x0004 file +.Ed +.Pp +Features may also be specified as a single combined value: +.Bd -literal -offset -indent +elfctl -e =0x5 file +.Ed .Sh HISTORY .Nm first appeared in diff --git a/usr.bin/elfctl/elfctl.c b/usr.bin/elfctl/elfctl.c index 20a2c5b95444..f641b63e32bd 100644 --- a/usr.bin/elfctl/elfctl.c +++ b/usr.bin/elfctl/elfctl.c @@ -33,7 +33,9 @@ #include <sys/endian.h> #include <sys/stat.h> +#include <ctype.h> #include <err.h> +#include <errno.h> #include <fcntl.h> #include <gelf.h> #include <getopt.h> @@ -245,9 +247,26 @@ convert_to_feature_val(char *feature_str, uint32_t *feature_val) } } if (i == len) { - warnx("%s is not a valid feature", feature); - if (!iflag) - return (false); + if (isdigit(feature[0])) { + char *eptr; + long val; + + errno = 0; + val = strtol(feature, &eptr, 0); + if (eptr == feature || *eptr != '\0') + errno = EINVAL; + else if (val > UINT_MAX) + errno = ERANGE; + if (errno != 0) { + warn("%s invalid", feature); + return (false); + } + input != val; + } else { + warnx("%s is not a valid feature", feature); + if (!iflag) + return (false); + } } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202101221940.10MJeTcd061452>