Currently, if an automatically freed allocation is an error pointer that will lead to a crash. An example of this is in wm831x_gpio_dbg_show(). 171 char *label __free(kfree) = gpiochip_dup_line_label(chip, i); 172 if (IS_ERR(label)) { 173 dev_err(wm831x->dev, "Failed to duplicate label\n"); 174 continue; 175 } The auto clean up function should check for error pointers as well, otherwise we're going to keep hitting issues like this.
Showing the changes to include (1 of 1 file). Show all
Unified · Split
| @@ -266,7 +266,7 @@ void kfree(const void *objp); · 265 unmodified lines | |||
| 266 | void kfree_sensitive(const void *objp); | 266 | void kfree_sensitive(const void *objp); |
| 267 | size_t __ksize(const void *objp); | 267 | size_t __ksize(const void *objp); |
| 268 | 268 | ||
| 269 | DEFINE_FREE(kfree, void *, if (_T) kfree(_T)) | 269 | DEFINE_FREE(kfree, void *, if (!IS_ERR_OR_NULL(_T)) kfree(_T)) |
| 270 | 270 | ||
| 271 | /** | 271 | /** |
| 272 | * ksize - Report actual allocation size of associated object | 272 | * ksize - Report actual allocation size of associated object |
| @@ -792,7 +792,7 @@ static inline __alloc_size(1, 2) void *kvcalloc(size_t n, size_t size, gfp_t fla · 519 unmodified lines | |||
| 792 | extern void *kvrealloc(const void *p, size_t oldsize, size_t newsize, gfp_t flags) | 792 | extern void *kvrealloc(const void *p, size_t oldsize, size_t newsize, gfp_t flags) |
| 793 | __realloc_size(3); | 793 | __realloc_size(3); |
| 794 | extern void kvfree(const void *addr); | 794 | extern void kvfree(const void *addr); |
| 795 | DEFINE_FREE(kvfree, void *, if (_T) kvfree(_T)) | 795 | DEFINE_FREE(kvfree, void *, if (!IS_ERR_OR_NULL(_T)) kvfree(_T)) |
| 796 | 796 | ||
| 797 | extern void kvfree_sensitive(const void *addr, size_t len); | 797 | extern void kvfree_sensitive(const void *addr, size_t len); |
| 798 | 798 | ||