Module Name:    src
Committed By:   kamil
Date:           Tue Jul  3 22:38:34 UTC 2018

Modified Files:
        src/sys/sys: wait.h

Log Message:
Try to appease KUBSan in sys/sys/wait.h in W_EXITCODE()

Cast return value that is stored as int to unsigned int in order to
appease the << 8 operation. In case of a ret=-1, this cast is papering
things over or replacing UB with an implementation specific behavior.

There is a reverse operation with the same papering things over:
WEXITSTATUS(x)  ((int)(((unsigned int)_W_INT(x)) >> 8) & 0xff)

No functional change intended.

Detected with Kernel Undefined Behavior Sanitizer.

Reported by <Harry Pantazis>


To generate a diff of this commit:
cvs rdiff -u -r1.35 -r1.36 src/sys/sys/wait.h

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/sys/wait.h
diff -u src/sys/sys/wait.h:1.35 src/sys/sys/wait.h:1.36
--- src/sys/sys/wait.h:1.35	Thu Nov 10 18:35:17 2016
+++ src/sys/sys/wait.h	Tue Jul  3 22:38:33 2018
@@ -1,4 +1,4 @@
-/*	$NetBSD: wait.h,v 1.35 2016/11/10 18:35:17 christos Exp $	*/
+/*	$NetBSD: wait.h,v 1.36 2018/07/03 22:38:33 kamil Exp $	*/
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993, 1994
@@ -69,7 +69,7 @@
 #define	WCOREFLAG	0200
 #define WCOREDUMP(x)	(_W_INT(x) & WCOREFLAG)
 
-#define	W_EXITCODE(ret, sig)	((ret) << 8 | (sig))
+#define	W_EXITCODE(ret, sig)	((unsigned int)(ret) << 8 | (sig))
 #define	W_STOPCODE(sig)		((sig) << 8 | _WSTOPPED)
 #define	W_CONTCODE()		(_WCONTINUED)
 #endif

Reply via email to