kees added a comment.

Example of the bug I want to block:

  struct foo {
      int stuff;
      u32 data[0];
  };
  
  struct foo *deserialize(u8 *str, int len)
  {
      struct foo *instance;
      size_t bytes;
  
      bytes = sizeof(*instance) + sizeof(instance->data) * (len / sizeof(u32));
      instance = kmalloc(bytes, GFP_KERNEL);
      if (!instance)
          return NULL;
      memcpy(instance->data, str, len)
  }

This contains a catastrophic 1 character bug (should be 
`sizeof(*instance->data)`) that will only be encountered at runtime when the 
memcpy runs past the end of the the allocation. It could have been caught at 
build-time if the flex-array extensions were disabled; without 
`-fstrict-flex-arrays=3` I have no way to block these (or similar) sneaking 
back into the kernel by way of old (or new) userspace APIs. :( So actually, 
even with `#pragma`, we could still trip over this. Please leave the `=3` mode.

https://godbolt.org/z/dexd3a4Y8


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126864/new/

https://reviews.llvm.org/D126864

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to