On Sat, 4 Apr 2020, Theo de Raadt wrote:
> Philip Guenther <[email protected]> wrote:
>
> > On Fri, 3 Apr 2020, Martin Pieuchot wrote:
> > > Thanks, here it is, ok?
> >
> > ok guenther@
>
> Should we do the same to all other macros, just in case?
Checking /usr/include/{,sys/}*.h, the diff below fixes the only ones I
found to be potential problems
/usr/include/net* and some others have not-completely-safe macros, like
IP6_EXTHDR_GET()
Index: include/bitstring.h
===================================================================
RCS file: /data/src/openbsd/src/include/bitstring.h,v
retrieving revision 1.5
diff -u -p -r1.5 bitstring.h
--- include/bitstring.h 2 Jun 2003 19:34:12 -0000 1.5
+++ include/bitstring.h 6 Apr 2020 00:37:52 -0000
@@ -83,46 +83,46 @@ typedef unsigned char bitstr_t;
/* clear bits start ... stop in bitstring */
#define bit_nclear(name, start, stop) do { \
- register bitstr_t *_name = name; \
- register int _start = start, _stop = stop; \
- while (_start <= _stop) { \
- bit_clear(_name, _start); \
- _start++; \
+ register bitstr_t *__name = (name); \
+ register int ___start = (start), __stop = (stop); \
+ while (__start <= __stop) { \
+ bit_clear(__name, __start); \
+ __start++; \
} \
} while(0)
/* set bits start ... stop in bitstring */
#define bit_nset(name, start, stop) do { \
- register bitstr_t *_name = name; \
- register int _start = start, _stop = stop; \
- while (_start <= _stop) { \
- bit_set(_name, _start); \
- _start++; \
+ register bitstr_t *__name = (name); \
+ register int __start = (start), __stop = (stop); \
+ while (__start <= __stop) { \
+ bit_set(__name, __start); \
+ __start++; \
} \
} while(0)
/* find first bit clear in name */
#define bit_ffc(name, nbits, value) do { \
- register bitstr_t *_name = name; \
- register int _bit, _nbits = nbits, _value = -1; \
- for (_bit = 0; _bit < _nbits; ++_bit) \
- if (!bit_test(_name, _bit)) { \
- _value = _bit; \
+ register bitstr_t *__name = (name); \
+ register int __bit, __nbits = (nbits), __value = -1; \
+ for (__bit = 0; __bit < __nbits; ++__bit) \
+ if (!bit_test(__name, __bit)) { \
+ __value = __bit; \
break; \
} \
- *(value) = _value; \
+ *(value) = __value; \
} while(0)
/* find first bit set in name */
#define bit_ffs(name, nbits, value) do { \
- register bitstr_t *_name = name; \
- register int _bit, _nbits = nbits, _value = -1; \
- for (_bit = 0; _bit < _nbits; ++_bit) \
- if (bit_test(_name, _bit)) { \
- _value = _bit; \
+ register bitstr_t *__name = (name); \
+ register int __bit, __nbits = (nbits), __value = -1; \
+ for (__bit = 0; __bit < __nbits; ++__bit) \
+ if (bit_test(__name, __bit)) { \
+ __value = __bit; \
break; \
} \
- *(value) = _value; \
+ *(value) = __value; \
} while(0)
#endif /* !_BITSTRING_H_ */
Index: sys/sys/disklabel.h
===================================================================
RCS file: /data/src/openbsd/src/sys/sys/disklabel.h,v
retrieving revision 1.75
diff -u -p -r1.75 disklabel.h
--- sys/sys/disklabel.h 24 Oct 2017 09:36:13 -0000 1.75
+++ sys/sys/disklabel.h 6 Apr 2020 00:52:08 -0000
@@ -156,37 +156,37 @@ struct __partitionv0 { /* old (v0) part
#define DL_GETPSIZE(p) (((u_int64_t)(p)->p_sizeh << 32) + (p)->p_size)
#define DL_SETPSIZE(p, n) do { \
- u_int64_t x = (n); \
- (p)->p_sizeh = x >> 32; \
- (p)->p_size = x; \
+ u_int64_t __x = (n); \
+ (p)->p_sizeh = __x >> 32; \
+ (p)->p_size = __x; \
} while (0)
#define DL_GETPOFFSET(p) (((u_int64_t)(p)->p_offseth << 32) +
(p)->p_offset)
#define DL_SETPOFFSET(p, n) do { \
- u_int64_t x = (n); \
- (p)->p_offseth = x >> 32; \
- (p)->p_offset = x; \
+ u_int64_t __x = (n); \
+ (p)->p_offseth = __x >> 32; \
+ (p)->p_offset = __x; \
} while (0)
#define DL_GETDSIZE(d) (((u_int64_t)(d)->d_secperunith << 32) + \
(d)->d_secperunit)
#define DL_SETDSIZE(d, n) do { \
- u_int64_t x = (n); \
- (d)->d_secperunith = x >> 32; \
- (d)->d_secperunit = x; \
+ u_int64_t __x = (n); \
+ (d)->d_secperunith = __x >> 32; \
+ (d)->d_secperunit = __x; \
} while (0)
#define DL_GETBSTART(d) (((u_int64_t)(d)->d_bstarth << 32) + \
(d)->d_bstart)
#define DL_SETBSTART(d, n) do { \
- u_int64_t x = (n); \
- (d)->d_bstarth = x >> 32; \
- (d)->d_bstart = x; \
+ u_int64_t __x = (n); \
+ (d)->d_bstarth = __x >> 32; \
+ (d)->d_bstart = __x; \
} while (0)
#define DL_GETBEND(d) (((u_int64_t)(d)->d_bendh << 32) + \
(d)->d_bend)
#define DL_SETBEND(d, n) do { \
- u_int64_t x = (n); \
- (d)->d_bendh = x >> 32; \
- (d)->d_bend = x; \
+ u_int64_t __x = (n); \
+ (d)->d_bendh = __x >> 32; \
+ (d)->d_bend = __x; \
} while (0)
#define DL_BLKSPERSEC(d) ((d)->d_secsize / DEV_BSIZE)
Index: sys/sys/event.h
===================================================================
RCS file: /data/src/openbsd/src/sys/sys/event.h,v
retrieving revision 1.34
diff -u -p -r1.34 event.h
--- sys/sys/event.h 4 Apr 2020 08:57:36 -0000 1.34
+++ sys/sys/event.h 6 Apr 2020 01:17:53 -0000
@@ -132,10 +132,10 @@ SLIST_HEAD(klist, knote);
*/
#define NOTE_SUBMIT 0x01000000 /* initial knote submission */
-#define KNOTE(list_, hint) do { \
- struct klist *list = (list_); \
- if ((list) != NULL) \
- knote((list), (hint)); \
+#define KNOTE(list, hint) do { \
+ struct klist *__list = (list); \
+ if (__list != NULL) \
+ knote(__list, hint); \
} while (0)
#define KN_HASHSIZE 64 /* XXX should be
tunable */
Index: sys/sys/exec.h
===================================================================
RCS file: /data/src/openbsd/src/sys/sys/exec.h,v
retrieving revision 1.40
diff -u -p -r1.40 exec.h
--- sys/sys/exec.h 29 Nov 2019 06:34:46 -0000 1.40
+++ sys/sys/exec.h 6 Apr 2020 01:03:03 -0000
@@ -179,18 +179,18 @@ void new_vmcmd(struct exec_vmcmd_set *ev
#define NEW_VMCMD(evsp,proc,len,addr,vp,offset,prot) \
NEW_VMCMD2(evsp,proc,len,addr,vp,offset,prot,0)
#define NEW_VMCMD2(evsp,proc,len,addr,vp,offset,prot,flags) do { \
- struct exec_vmcmd *vcp; \
+ struct exec_vmcmd *__vcp; \
if ((evsp)->evs_used >= (evsp)->evs_cnt) \
vmcmdset_extend(evsp); \
- vcp = &(evsp)->evs_cmds[(evsp)->evs_used++]; \
- vcp->ev_proc = (proc); \
- vcp->ev_len = (len); \
- vcp->ev_addr = (addr); \
- if ((vcp->ev_vp = (vp)) != NULLVP) \
+ __vcp = &(evsp)->evs_cmds[(evsp)->evs_used++]; \
+ __vcp->ev_proc = (proc); \
+ __vcp->ev_len = (len); \
+ __vcp->ev_addr = (addr); \
+ if ((__vcp->ev_vp = (vp)) != NULLVP) \
vref(vp); \
- vcp->ev_offset = (offset); \
- vcp->ev_prot = (prot); \
- vcp->ev_flags = (flags); \
+ __vcp->ev_offset = (offset); \
+ __vcp->ev_prot = (prot); \
+ __vcp->ev_flags = (flags); \
} while (0)
#endif /* DEBUG */
Index: sys/sys/signalvar.h
===================================================================
RCS file: /data/src/openbsd/src/sys/sys/signalvar.h,v
retrieving revision 1.40
diff -u -p -r1.40 signalvar.h
--- sys/sys/signalvar.h 13 Mar 2020 09:25:21 -0000 1.40
+++ sys/sys/signalvar.h 5 Apr 2020 22:23:16 -0000
@@ -86,9 +86,9 @@ struct sigacts {
* Clear a pending signal from a process.
*/
#define CLRSIG(p, sig) do { \
- int _mask = sigmask(sig); \
- atomic_clearbits_int(&(p)->p_siglist, _mask); \
- atomic_clearbits_int(&(p)->p_p->ps_siglist, _mask); \
+ int __mask = sigmask(sig); \
+ atomic_clearbits_int(&(p)->p_siglist, __mask); \
+ atomic_clearbits_int(&(p)->p_p->ps_siglist, __mask); \
} while (0)
/*
Index: sys/sys/sysctl.h
===================================================================
RCS file: /data/src/openbsd/src/sys/sys/sysctl.h,v
retrieving revision 1.205
diff -u -p -r1.205 sysctl.h
--- sys/sys/sysctl.h 13 Mar 2020 10:07:01 -0000 1.205
+++ sys/sys/sysctl.h 6 Apr 2020 01:13:40 -0000
@@ -679,7 +679,7 @@ do {
\
PR_UNLOCK(pr); \
\
if (((pr)->ps_flags & PS_ZOMBIE) == 0) { \
- struct timeval tv; \
+ struct timeval __tv; \
\
(kp)->p_uvalid = 1; \
\
@@ -699,9 +699,9 @@ do {
\
(kp)->p_uru_nivcsw = (p)->p_ru.ru_nivcsw; \
\
timeradd(&(pr)->ps_cru.ru_utime, \
- &(pr)->ps_cru.ru_stime, &tv); \
- (kp)->p_uctime_sec = tv.tv_sec; \
- (kp)->p_uctime_usec = tv.tv_usec; \
+ &(pr)->ps_cru.ru_stime, &__tv); \
+ (kp)->p_uctime_sec = __tv.tv_sec; \
+ (kp)->p_uctime_usec = __tv.tv_usec; \
} \
\
(kp)->p_cpuid = KI_NOCPU; \