EV_SET() trouble
I committed the following patch [1] to NetBSD, it's a valid issue for OpenBSD as well [2]: Convert EV_SET from macro to static __inline function LLDB introduced support for kevent(2) and it contains the following function: Status MainLoop::RunImpl::Poll() { in_events.resize(loop.m_read_fds.size()); unsigned i = 0; for (auto : loop.m_read_fds) EV_SET(_events[i++], fd.first, EVFILT_READ, EV_ADD, 0, 0, 0); num_events = kevent(loop.m_kqueue, in_events.data(), in_events.size(), out_events, llvm::array_lengthof(out_events), nullptr); if (num_events < 0) return Status("kevent() failed with error %d\n", num_events); return Status(); } It works on FreeBSD and MacOSX, however it broke on NetBSD. Culrpit line: EV_SET(_events[i++], fd.first, EVFILT_READ, EV_ADD, 0, 0, 0); FreeBSD defined EV_SET() as a macro this way: #define EV_SET(kevp_, a, b, c, d, e, f) do {\ struct kevent *kevp = (kevp_); \ (kevp)->ident = (a);\ (kevp)->filter = (b); \ (kevp)->flags = (c);\ (kevp)->fflags = (d); \ (kevp)->data = (e); \ (kevp)->udata = (f);\ } while(0) NetBSD version was different: #define EV_SET(kevp, a, b, c, d, e, f) \ do {\ (kevp)->ident = (a);\ (kevp)->filter = (b); \ (kevp)->flags = (c);\ (kevp)->fflags = (d); \ (kevp)->data = (e); \ (kevp)->udata = (f);\ } while (/* CONSTCOND */ 0) This resulted in heap damage, as keyp was incremented every time value was assigned to (keyp)->. [...] http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/sys/event.h.diff?r1=1.26=1.27_with_tag=MAIN=h [2] http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/sys/sys/event.h?annotate=1.23 signature.asc Description: OpenPGP digital signature
Re: ASan on OpenBSD
On 01.05.2017 12:28, Mark Kettenis wrote: >> From: Dmitry Vyukov>> Date: Mon, 1 May 2017 10:43:26 +0200 >> >> On Mon, May 1, 2017 at 8:51 AM, Greg Steuck wrote: >>> I naively tried to build something with -fsanitize=address using llvm-4.0 >>> port available on OpenBSD 6.1-amd64. I was immediately greeted with: >>> clang-4.0: error: unsupported option '-fsanitize=address' for target >>> 'amd64-unknown-openbsd6.1' >>> >>> How deep a rat hole does one have to go to port ASan to a new >>> flavour of BSD? Is OpenBSD going to be particularly painful with >>> its special malloc and advanced ASLR? Is anybody working on this? > > Our focus is currently still on integrating llvm/clang/lld into > OpenBSD. As far as I know nobody is working on this yet, but it > sounds like something we'd certainly be interested in having. > I'm interested in llvm sanitizers and fuzzers on NetBSD. Currently my focus is on LLDB, and next I will plan move on to LLD (linker). The current solution on NetBSD is to use the GNU flavors that work well. signature.asc Description: OpenPGP digital signature
patch/ mg(1) include time.h for struct timespec
Caught on NetBSD. Index: def.h === RCS file: /cvs/src/usr.bin/mg/def.h,v retrieving revision 1.147 diff -u -r1.147 def.h --- def.h 3 Jun 2015 23:40:01 - 1.147 +++ def.h 21 Jun 2015 23:43:23 - @@ -10,6 +10,8 @@ * per-terminal definitions are in special header files. */ +#include time.h + #include chrdef.h typedef int(*PF)(int, int);/* generally useful type */
Re: patch/ mg(1) include time.h for struct timespec
On 22.06.2015 01:55, Brian Callahan wrote: This is quite obviously the wrong place to put any headers. It's odd, otherwise then the code should be refactored and the following struct perhaps moved away, together with struct buffer? /* * Previously from sysdef.h * Only used in struct buffer. */ struct fileinfo { uid_t fi_uid; gid_t fi_gid; mode_t fi_mode; struct timespec fi_mtime; /* Last modified time */ }; Are there better ideas?
mg(1) sysdef.h cleanning
Hello Brian, Thank you for erasing sysdef.h and pushing the task even further. It will make life easier to deal with it in a modern environment. Good work.
mg(1): refactor sysdef.h?
Hello, Currently sysdef.h includes C headers for little purpose, as the same headers are already pulled in appropriate .c files. In the result the headers listed in sysdef.h are pulled in twice. I propose to move the remaining content (literally 11 lines-of-code) to def.h or a better place. I think that back in time all system includes were pulled in from sysdef.h, today I see no need for it any more.
Re: mg(1): refactor sysdef.h?
Brian Callahan wrote: On 03/15/15 19:24, Kamil Rytarowski wrote: Hello, Currently sysdef.h includes C headers for little purpose, as the same headers are already pulled in appropriate .c files. In the result the headers listed in sysdef.h are pulled in twice. I propose to move the remaining content (literally 11 lines-of-code) to def.h or a better place. I think that back in time all system includes were pulled in from sysdef.h, today I see no need for it any more. I'm not sure you've tried doing that. There's a warning to include those files in order for a reason. However, there are some files that have redundant includes. Below is a diff to remove those. OK? Thank you, this is another approach. OK from me!
Re: (patch) mg(1) reallocarray cleanup
Me wrote: I'm attaching a patch. Ooops, wrong file. New attached. patch-display.c-reallocarray-cleanup Description: Binary data
(patch) mg(1) reallocarray cleanup
Hello, I'm attaching a patch. Regards, patch-display.c-reallocarray-cleanup Description: Binary data
Re: ksh version lies
Ted Unangst wrote: ksh (and sh) have a version string embedded in them: @(#)PD KSH v5.2.14 99/07/13.2 This is clearly a lie. We've added, removed, and fixed bugs and features since then. I first noticed the lie in the man page, then saw that it's also exported via the environment and other places. Instead of trying to fix something that can't be fixed, it's simpler to delete it entirely. [...] 1. MacOSX Please see: https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/ksh.1.html 2. ksh93 Please see original source code of ksh93 (links from http://kornshell.com ). Extracted from their sh.1 embedded in the source package: .sh.version Set to a value that identifies the version of this shell. KSH_VERSION A name reference to .sh.version. 3. MirBSD Korn Shell (pdksh fork) ( http://linux.die.net/man/1/mksh ) KSH_VERSIONThe name and version of the shell (read-only). What's broken?
Re: Want to help upstream software improve their random?
Sent: Friday, December 12, 2014 at 5:02 AM From: Theo de Raadt dera...@cvs.openbsd.org To: t...@cvs.openbsd.org Subject: Want to help upstream software improve their random? Not my business, but how do you handle cases of rand() srand()-like calls from software like awk? What is and what should be the result of: for w in `seq 1 10`; do awk 'BEGIN{print int(rand() * 32767)}'; done or for w in `seq 1 10`; do awk 'BEGIN{srand(); print int(rand() * 32767)}'; done
mg(1): Second set of patches
Hello, I'm attaching two enhancements against mg(1): 0001-Include-limits.h-for-INT_MIN-and-INT_MAX.patch 0002-Comparison-of-array-bp-b_fname-not-equal-to-a-null-p.patch Regards,From f4a353e59af01b14455a6302e6309887b70796ba Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski n...@gmx.com Date: Sat, 15 Nov 2014 09:03:19 + Subject: [PATCH 1/2] Include limits.h for INT_MIN and INT_MAX --- basic.c | 1 + cscope.c| 1 + extend.c| 1 + grep.c | 1 + line.c | 1 + main.c | 1 + paragraph.c | 1 + 7 files changed, 7 insertions(+) diff --git a/basic.c b/basic.c index 5d6f093..340bd8d 100644 --- a/basic.c +++ b/basic.c @@ -14,6 +14,7 @@ #include def.h #include ctype.h +#include limits.h /* * Go to beginning of line. diff --git a/cscope.c b/cscope.c index b334e6b..9f79579 100644 --- a/cscope.c +++ b/cscope.c @@ -13,6 +13,7 @@ #include ctype.h #include fcntl.h #include fnmatch.h +#include limits.h #include stdio.h #include stdlib.h #include string.h diff --git a/extend.c b/extend.c index 6196691..2f3d965 100644 --- a/extend.c +++ b/extend.c @@ -12,6 +12,7 @@ #include sys/types.h #include ctype.h +#include limits.h #include macro.h diff --git a/grep.c b/grep.c index 55f7ae1..055bf33 100644 --- a/grep.c +++ b/grep.c @@ -9,6 +9,7 @@ #include sys/types.h #include ctype.h #include libgen.h +#include limits.h #include time.h int globalwd = FALSE; diff --git a/line.c b/line.c index 51d1765..ca0b776 100644 --- a/line.c +++ b/line.c @@ -19,6 +19,7 @@ #include def.h +#include limits.h #include stdlib.h #include string.h diff --git a/main.c b/main.c index 9204d63..7bcfe61 100644 --- a/main.c +++ b/main.c @@ -12,6 +12,7 @@ #include macro.h #include err.h +#include limits.h #include locale.h int thisflag; /* flags, this command */ diff --git a/paragraph.c b/paragraph.c index d45efc4..9d593f7 100644 --- a/paragraph.c +++ b/paragraph.c @@ -8,6 +8,7 @@ */ #include ctype.h +#include limits.h #include def.h -- 2.1.0 From 4e3150317ef5e73933b0c53b3163861710085f67 Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski n...@gmx.com Date: Sat, 15 Nov 2014 16:29:07 + Subject: [PATCH 2/2] Comparison of array 'bp-b_fname' not equal to a null pointer is always true --- buffer.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/buffer.c b/buffer.c index 331fbbb..51b2838 100644 --- a/buffer.c +++ b/buffer.c @@ -458,8 +458,7 @@ anycb(int f) char pbuf[NFILEN + 11]; for (bp = bheadp; bp != NULL; bp = bp-b_bufp) { - if (bp-b_fname != NULL *(bp-b_fname) != '\0' - (bp-b_flag BFCHG) != 0) { + if (*(bp-b_fname) != '\0' (bp-b_flag BFCHG) != 0) { ret = snprintf(pbuf, sizeof(pbuf), Save file %s, bp-b_fname); if (ret 0 || ret = sizeof(pbuf)) { -- 2.1.0
Re: mg(1) compatibility patches
Sent: Sunday, November 16, 2014 at 1:09 AM From: Philip Guenther guent...@gmail.com To: Kamil Rytarowski n...@gmx.com Cc: Theo de Raadt dera...@cvs.openbsd.org, tech-openbsd tech@openbsd.org, Ted Unangst t...@tedunangst.com Subject: Re: mg(1) compatibility patches On Fri, Nov 14, 2014 at 3:16 PM, Kamil Rytarowski n...@gmx.com wrote: ... Feel free to evaluate the rest of the patches (0002-0005), as they are meant to be generic. With a couple, I've committed those. Thanks! Philip Guenther Thank you!
mg(1) comaptibility patches
Hello, I'm a user of mg(1) and I'm not a user of OpenBSD. According to known resources mg(1) [1] is currently maintained in OpenBSD's tree. As maintaining local patches or forking mg(1) for plain compatibility is doubtful, I'm going to send you a set of patches. I don't want to make noise with a mail per patch, so I'm attaching all patches to this mail. Please review (if needed adapt) and merge. List of files: 0001-Define-strtonum-3-for-the-NetBSD-target.patch 0002-Add-missing-include-for-struct-timespec-NetBSD.patch 0003-Fix-const-correctness-in-charcost-usage.patch 0004-Fix-const-correctness-of-scroll_fwd.patch 0005-dci-is-set-but-unused.patch 0006-Enhance-type-correctness-cast-parameter-of-isspace-3.patch My goal is to upgrade pkgsrc's version to the latest mg and reuse it system-wide, therefore this is the first bunch of patches, next things are waiting in the queue. [1] http://en.wikipedia.org/wiki/Mg_%28editor%29From d49301b6559e2b1d432fd347fc826a255f9a3fdb Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski n...@gmx.com Date: Fri, 14 Nov 2014 17:55:03 + Subject: [PATCH 1/6] Define strtonum(3) for the NetBSD target --- strtonum.h | 70 ++ sysdef.h | 4 2 files changed, 74 insertions(+) create mode 100644 strtonum.h diff --git a/strtonum.h b/strtonum.h new file mode 100644 index 000..74ed381 --- /dev/null +++ b/strtonum.h @@ -0,0 +1,70 @@ +/* $OpenBSD: strtonum.c,v 1.7 2013/04/17 18:40:58 tedu Exp $ */ + +/* + * Copyright (c) 2004 Ted Unangst and Todd Miller + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED AS IS AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _STRTONUM_COMPAT_ +#define _STRTONUM_COMPAT_ + +#include errno.h +#include limits.h +#include stdlib.h + +#define INVALID 1 +#define TOOSMALL 2 +#define TOOLARGE 3 + +static inline long long +strtonum(const char *numstr, long long minval, long long maxval, +const char **errstrp) +{ + long long ll = 0; + int error = 0; + char *ep; + struct errval { + const char *errstr; + int err; + } ev[4] = { + { NULL, 0 }, + { invalid, EINVAL }, + { too small, ERANGE }, + { too large, ERANGE }, + }; + + ev[0].err = errno; + errno = 0; + if (minval maxval) { + error = INVALID; + } else { + ll = strtoll(numstr, ep, 10); + if (numstr == ep || *ep != '\0') + error = INVALID; + else if ((ll == LLONG_MIN errno == ERANGE) || ll minval) + error = TOOSMALL; + else if ((ll == LLONG_MAX errno == ERANGE) || ll maxval) + error = TOOLARGE; + } + if (errstrp != NULL) + *errstrp = ev[error].errstr; + errno = ev[error].err; + if (error) + ll = 0; + + return (ll); +} + +#endif /* _STRTONUM_COMPAT_ */ diff --git a/sysdef.h b/sysdef.h index 8d3d3a2..3fde496 100644 --- a/sysdef.h +++ b/sysdef.h @@ -19,6 +19,10 @@ # define LOGIN_NAME_MAX _POSIX_LOGIN_NAME_MAX #endif +#if defined(__NetBSD__) +# include strtonum.h /* OpenBSD specific function */ +#endif + #include stdio.h #include unistd.h #include stdlib.h -- 2.1.0 From 4f4c1beac4422bce6419442320a67e8028ca1876 Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski n...@gmx.com Date: Fri, 14 Nov 2014 17:55:36 + Subject: [PATCH 2/6] Add missing include for struct timespec (NetBSD) --- sysdef.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sysdef.h b/sysdef.h index 3fde496..d51fe5b 100644 --- a/sysdef.h +++ b/sysdef.h @@ -20,6 +20,7 @@ #endif #if defined(__NetBSD__) +# include sys/time.h /* struct timespec */ # include strtonum.h /* OpenBSD specific function */ #endif -- 2.1.0 From fb3b8c0f9350e0050de4ca72d60ba1a69d32bcba Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski n...@gmx.com Date: Fri, 14 Nov 2014 18:06:05 + Subject: [PATCH 3/6] Fix const correctness in charcost usage --- tty.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tty.c b/tty.c index f803cc7..7a77ff0 100644 --- a/tty.c +++ b/tty.c @@ -35,7 +35,7 @@ #include term.h -static int charcost(char *); +static int charcost(const char *); static int cci; static int insdel; /* Do we have both insert delete line? */ @@ -438,7 +438,7 @@ fakec(int c) /* calculate the cost of doing string s */ static int -charcost(char *s) +charcost(const char *s) { cci = 0; -- 2.1.0 From 7830cd4b67d0992861d31d3cf8c38a620de47c27 Mon Sep 17 00
Re: mg(1) compatibility patches
Hello, Thank you for your comments. Please see my comments below. With regards, Sent: Friday, November 14, 2014 at 8:48 PM From: Philip Guenther guent...@gmail.com To: Kamil Rytarowski n...@gmx.com Cc: tech-openbsd tech@openbsd.org Subject: Re: mg(1) comaptibility patches On Fri, Nov 14, 2014 at 11:29 AM, Kamil Rytarowski n...@gmx.com wrote: As maintaining local patches or forking mg(1) for plain compatibility is doubtful, I'm going to send you a set of patches. I don't want to make noise with a mail per patch, so I'm attaching all patches to this mail. Please review (if needed adapt) and merge. List of files: ... 0002-Add-missing-include-for-struct-timespec-NetBSD.patch sysdef.h should include time.h for struct timespec; sys/time.h is not required to provide it. Fixed. I changed it to be pulled on all platforms. ... 0006-Enhance-type-correctness-cast-parameter-of-isspace-3.patch This diff is wrong, sorry. The code where a ctype function is being called on a char from a char * pointer should be casting to (unsigned char); the code where 'c' is set from lgetc() should declare c as an int, as lgetc() does the necessary cast. Hopefully fixed. Philip Guenther From 4a1225c6c64fc857c6442b0135642a109f1d045d Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski n...@gmx.com Date: Fri, 14 Nov 2014 17:55:36 + Subject: [PATCH 2/6] Add missing include for struct timespec --- sysdef.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sysdef.h b/sysdef.h index 3fde496..2f5078e 100644 --- a/sysdef.h +++ b/sysdef.h @@ -29,6 +29,7 @@ #include string.h #include errno.h #include signal.h +#include time.h #define KBLOCK 8192 /* Kill grow. */ #define GOOD 0 /* Good exit status. */ -- 2.1.0 From 4df46840b96e4de796e822f6636ea0e59b55697a Mon Sep 17 00:00:00 2001 From: Kamil Rytarowski n...@gmx.com Date: Fri, 14 Nov 2014 18:34:44 + Subject: [PATCH 6/6] Enhance parameter type correctness of ctype functions --- cscope.c | 2 +- extend.c | 2 +- grep.c | 3 ++- tags.c | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/cscope.c b/cscope.c index 0deada3..b334e6b 100644 --- a/cscope.c +++ b/cscope.c @@ -557,7 +557,7 @@ prettyprint(struct buffer *bp, struct cstokens *t) const char * ltrim(const char *s) { - while (isblank(*s)) + while (isblank((unsigned char)*s)) s++; return s; } diff --git a/extend.c b/extend.c index ef59d5f..6196691 100644 --- a/extend.c +++ b/extend.c @@ -446,7 +446,7 @@ dobindkey(KEYMAP *map, const char *func, const char *str) for (i = 0; *str i MAXKEY; i++) { /* XXX - convert numbers w/ strol()? */ if (*str == '^' *(str + 1) != '\0') { - key.k_chars[i] = CCHR(toupper(*++str)); + key.k_chars[i] = CCHR(toupper((unsigned char)*++str)); } else if (*str == '\\' *(str + 1) != '\0') { switch (*++str) { case '^': diff --git a/grep.c b/grep.c index 6a4c1c4..55f7ae1 100644 --- a/grep.c +++ b/grep.c @@ -113,7 +113,8 @@ static int gid(int f, int n) { char command[NFILEN]; - char cprompt[NFILEN], c, *bufp; + char cprompt[NFILEN], *bufp; + int c; struct buffer *bp; struct mgwin *wp; int i, j, len; diff --git a/tags.c b/tags.c index e847b9e..b75f703 100644 --- a/tags.c +++ b/tags.c @@ -482,7 +482,7 @@ curtoken(int f, int n, char *token) /* strip away leading whitespace if any like emacs. */ while (ltext(curwp-w_dotp) - isspace(curwp-w_dotp-l_text[tdoto])) + isspace((unsigned char)curwp-w_dotp-l_text[tdoto])) tdoto++; size = curwp-w_doto - tdoto; -- 2.1.0
Re: mg(1) compatibility patches
Sent: Friday, November 14, 2014 at 9:10 PM From: Ted Unangst t...@tedunangst.com To: Kamil Rytarowski n...@gmx.com Cc: tech@openbsd.org Subject: Re: mg(1) comaptibility patches On Fri, Nov 14, 2014 at 20:29, Kamil Rytarowski wrote: 0001-Define-strtonum-3-for-the-NetBSD-target.patch I don't like this at all. The reason we put strtonum in libc is precisely not to have multiple copies of it floating around the tree. Uncompiled copies are still clutter. This may be odd for a BSD system, but perhaps the pkgsrc version could link against libbsd? Actually not as libbsd is in reality GNU/Linux-oriented. Other solution is to go backward for strtol(3)-like functions, what do you think?
Re: mg(1) compatibility patches
Sent: Friday, November 14, 2014 at 9:59 PM From: Theo de Raadt dera...@cvs.openbsd.org To: n...@gmx.com, t...@tedunangst.com Cc: tech@openbsd.org Subject: Re: mg(1) compatibility patches Sent: Friday, November 14, 2014 at 9:10 PM From: Ted Unangst t...@tedunangst.com To: Kamil Rytarowski n...@gmx.com Cc: tech@openbsd.org Subject: Re: mg(1) comaptibility patches On Fri, Nov 14, 2014 at 20:29, Kamil Rytarowski wrote: 0001-Define-strtonum-3-for-the-NetBSD-target.patch I don't like this at all. The reason we put strtonum in libc is precisely not to have multiple copies of it floating around the tree. Uncompiled copies are still clutter. This may be odd for a BSD system, but perhaps the pkgsrc version could link against libbsd? Actually not as libbsd is in reality GNU/Linux-oriented. Other solution is to go backward for strtol(3)-like functions, what do you think? Solution to what problem? Hello Theo, mg(1) is maintained in OpenBSD's CVS tree, therefore OpenBSD is upstream. In downstream (except FreeBSD and libbsd consumers) there is missing strtonum(3). To enhance mg(1) and catch its bugs in general I need to start with improvement of its portability to other unsupported systems (as I'm a consumer of few pkgsrc platforms). Please point appropriate way to do it, preferably without floating patches around. Best regards,