chiark / gitweb /
regress: fuzzraw: Introduce hm_rv_wlen
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 1 Dec 2016 02:24:27 +0000 (02:24 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 11 Jun 2020 15:13:02 +0000 (16:13 +0100)
This lets us stop AFL causing us to tell adns that write returned
stupidly large answers.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
regress/hfuzzraw.c.m4
regress/hmacros.i4
regress/hsyscalls.i4

index 5ce1b3efc92567cb8e01de6288667652ee12714b..b2e82fd01663c3fd6f700b9242461204fa96d731 100644 (file)
@@ -308,6 +308,10 @@ int H$1(hm_args_massage($3,void)) {
     r= newfd;
  }
  ')
+ m4_define(`hm_rv_wlen',`
+  hm_rv_any
+  if (r>$'`1) Pformat("write return value too large");
+ ')
  $2
 
  hm_create_nothing
index 83f5f25edde87b7052d6f094791ca90cc1ccd29d..3119f2737fb37799160644c76cadc5ad41730e16 100644 (file)
@@ -59,6 +59,7 @@ m4_define(`hm_create_nothing', `
  m4_define(`hm_rv_fd', `')
  m4_define(`hm_rv_succfail', `')
  m4_define(`hm_rv_len', `')
+ m4_define(`hm_rv_wlen', `hm_rv_any')
  m4_define(`hm_rv_fcntl', `')
  m4_define(`hm_rv_select', `hm_rv_any')
  m4_define(`hm_rv_poll', `hm_rv_any')
index 9bb6c3d862d9fe3a1c32572e8c9a08da0ee8f58b..fc76fd180c6213d8d2181a6133cc45020f7db7a9 100644 (file)
@@ -29,7 +29,8 @@ m4_dnl  hm_rv_must       must succeed and return 0
 m4_dnl  hm_rv_any        any nonnegative return allowed, -1 means see errno
 m4_dnl  hm_rv_fd         file descriptor is returned, -1 means see errno
 m4_dnl  hm_rv_succfail   returns 0 (ok) or -1 (see errno)
-m4_dnl  hm_rv_len(<max>) returns length read/written, must be <=max, -1 => errno
+m4_dnl  hm_rv_len(<max>) returns length read, must be <=max, -1 => errno
+m4_dnl  hm_rv_wlen(<max>) returns length written, must be <=max, -1 => errno
 m4_dnl  hm_rv_fcntl      syscall is fcntl, do special processing
 m4_dnl  hm_rv_select     select, do special processing } default is _any
 m4_dnl  hm_rv_poll       poll, do special processing   }  after create_nothing
@@ -103,7 +104,7 @@ hm_syscall(
 ')
 
 hm_syscall(
-       sendto, `hm_rv_any', `
+       sendto, `hm_rv_wlen(msglen)', `
        hm_arg_fd(fd) hm_na
        hm_arg_bytes_in(void,msg,int,msglen) hm_na
        hm_arg_must(unsigned int,flags,0) hm_na
@@ -125,7 +126,7 @@ hm_syscall(
 ')
 
 hm_syscall(
-       write, `hm_rv_any', `
+       write, `hm_rv_wlen(len)', `
        hm_arg_fd(fd) hm_na
        hm_arg_bytes_in(void,buf,size_t,len) hm_na
 ')