From e8dd2c6713522707b3b89884eb95601cdf9bc9be Mon Sep 17 00:00:00 2001 From: Dmitry Vyukov Date: Thu, 30 Aug 2018 14:17:47 -0700 Subject: prog: add concept of "special pointers" Currently we only generate either valid user-space pointers or NULL. Extend NULL to a set of special pointers that we will use in programs. All targets now contain 3 special values: - NULL - 0xfffffffffffffff (invalid kernel pointer) - 0x999999999999999 (non-canonical address) Each target can add additional special pointers on top of this. Also generate NULL/special pointers for non-opt ptr's. This restriction was always too restrictive. We may want to generate them with very low probability, but we do want to generate them. Also change pointers to NULL/special during mutation (but still not in the opposite direction). --- prog/analysis.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'prog/analysis.go') diff --git a/prog/analysis.go b/prog/analysis.go index 3ebfbda61..c26e14014 100644 --- a/prog/analysis.go +++ b/prog/analysis.go @@ -57,7 +57,7 @@ func (s *state) analyzeImpl(c *Call, resources bool) { switch a := arg.(type) { case *PointerArg: switch { - case a.IsNull(): + case a.IsSpecial(): case a.VmaSize != 0: s.va.noteAlloc(a.Address/s.target.PageSize, a.VmaSize/s.target.PageSize) default: @@ -273,7 +273,7 @@ func extractArgSignal(arg Arg, callID, flags int, inf *CallInfo, resources map[* } case *PointerArg: flags <<= 1 - if a.IsNull() { + if a.IsSpecial() { flags |= 1 } } -- cgit mrf-deployment