Re: [mmotm:master 45/283] mm/kasan/common.c:238:7: error: 'struct kmem_cache' has no member named 'kasan_info'

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Dec 5, 2018 at 8:09 AM kbuild test robot <lkp@xxxxxxxxx> wrote:
>
> Hi Andrey,
>
> First bad commit (maybe != root cause):
>
> tree:   git://git.cmpxchg.org/linux-mmotm.git master
> head:   1b1ce5151f3dd9a5bc989207ac56e96dcb84bef4
> commit: 60e8d1374609a0f5846f0c8ac1c7907501b58c7e [45/283] kasan: add CONFIG_KASAN_GENERIC and CONFIG_KASAN_SW_TAGS
> config: x86_64-randconfig-x007-12051024 (attached as .config)
> compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
> reproduce:
>         git checkout 60e8d1374609a0f5846f0c8ac1c7907501b58c7e
>         # save the attached .config to linux build tree
>         make ARCH=x86_64
>
> All error/warnings (new ones prefixed by >>):

Looks like the same issues with configs, will fix in v13.

>
>    mm/kasan/common.c: In function 'kasan_cache_create':
> >> mm/kasan/common.c:238:7: error: 'struct kmem_cache' has no member named 'kasan_info'
>      cache->kasan_info.alloc_meta_offset = *size;
>           ^~
>    mm/kasan/common.c:244:8: error: 'struct kmem_cache' has no member named 'kasan_info'
>       cache->kasan_info.free_meta_offset = *size;
>            ^~
>    mm/kasan/common.c:260:20: error: 'struct kmem_cache' has no member named 'kasan_info'
>      if (*size <= cache->kasan_info.alloc_meta_offset ||
>                        ^~
>    mm/kasan/common.c:261:18: error: 'struct kmem_cache' has no member named 'kasan_info'
>        *size <= cache->kasan_info.free_meta_offset) {
>                      ^~
>    mm/kasan/common.c:262:8: error: 'struct kmem_cache' has no member named 'kasan_info'
>       cache->kasan_info.alloc_meta_offset = 0;
>            ^~
>    mm/kasan/common.c:263:8: error: 'struct kmem_cache' has no member named 'kasan_info'
>       cache->kasan_info.free_meta_offset = 0;
>            ^~
>    mm/kasan/common.c: In function 'kasan_metadata_size':
>    mm/kasan/common.c:273:15: error: 'struct kmem_cache' has no member named 'kasan_info'
>      return (cache->kasan_info.alloc_meta_offset ?
>                   ^~
>    mm/kasan/common.c:275:9: error: 'struct kmem_cache' has no member named 'kasan_info'
>       (cache->kasan_info.free_meta_offset ?
>             ^~
>    mm/kasan/common.c: In function 'get_alloc_info':
>    mm/kasan/common.c:283:31: error: 'struct kmem_cache' has no member named 'kasan_info'
>      return (void *)object + cache->kasan_info.alloc_meta_offset;
>                                   ^~
>    mm/kasan/common.c: In function 'get_free_info':
>    mm/kasan/common.c:290:31: error: 'struct kmem_cache' has no member named 'kasan_info'
>      return (void *)object + cache->kasan_info.free_meta_offset;
>                                   ^~
>    In file included from include/linux/export.h:45:0,
>                     from mm/kasan/common.c:16:
>    mm/kasan/common.c: In function '__kasan_slab_free':
> >> mm/kasan/common.c:336:15: error: implicit declaration of function 'nearest_obj' [-Werror=implicit-function-declaration]
>      if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) !=
>                   ^
>    include/linux/compiler.h:77:42: note: in definition of macro 'unlikely'
>     # define unlikely(x) __builtin_expect(!!(x), 0)
>                                              ^
> >> mm/kasan/common.c:336:69: warning: comparison between pointer and integer
>      if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) !=
>                                                                         ^
>    include/linux/compiler.h:77:42: note: in definition of macro 'unlikely'
>     # define unlikely(x) __builtin_expect(!!(x), 0)
>                                              ^
>    mm/kasan/common.c: In function 'kasan_metadata_size':
> >> mm/kasan/common.c:277:1: warning: control reaches end of non-void function [-Wreturn-type]
>     }
>     ^
>    mm/kasan/common.c: In function 'get_alloc_info':
>    mm/kasan/common.c:284:1: warning: control reaches end of non-void function [-Wreturn-type]
>     }
>     ^
>    mm/kasan/common.c: In function 'get_free_info':
>    mm/kasan/common.c:291:1: warning: control reaches end of non-void function [-Wreturn-type]
>     }
>     ^
>    cc1: some warnings being treated as errors
> --
>    mm/kasan/report.c: In function 'print_address_description':
> >> mm/kasan/report.c:261:18: error: implicit declaration of function 'nearest_obj' [-Werror=implicit-function-declaration]
>       void *object = nearest_obj(cache, page, addr);
>                      ^~~~~~~~~~~
> >> mm/kasan/report.c:261:18: warning: initialization makes pointer from integer without a cast [-Wint-conversion]
>    cc1: some warnings being treated as errors
>
> vim +238 mm/kasan/common.c
>
> 6d7b7611 Andrey Konovalov 2018-11-29  230
> 6d7b7611 Andrey Konovalov 2018-11-29  231  void kasan_cache_create(struct kmem_cache *cache, unsigned int *size,
> 6d7b7611 Andrey Konovalov 2018-11-29  232                       slab_flags_t *flags)
> 6d7b7611 Andrey Konovalov 2018-11-29  233  {
> 6d7b7611 Andrey Konovalov 2018-11-29  234       unsigned int orig_size = *size;
> 6d7b7611 Andrey Konovalov 2018-11-29  235       int redzone_adjust;
> 6d7b7611 Andrey Konovalov 2018-11-29  236
> 6d7b7611 Andrey Konovalov 2018-11-29  237       /* Add alloc meta. */
> 6d7b7611 Andrey Konovalov 2018-11-29 @238       cache->kasan_info.alloc_meta_offset = *size;
> 6d7b7611 Andrey Konovalov 2018-11-29  239       *size += sizeof(struct kasan_alloc_meta);
> 6d7b7611 Andrey Konovalov 2018-11-29  240
> 6d7b7611 Andrey Konovalov 2018-11-29  241       /* Add free meta. */
> 6d7b7611 Andrey Konovalov 2018-11-29  242       if (cache->flags & SLAB_TYPESAFE_BY_RCU || cache->ctor ||
> 6d7b7611 Andrey Konovalov 2018-11-29  243           cache->object_size < sizeof(struct kasan_free_meta)) {
> 6d7b7611 Andrey Konovalov 2018-11-29  244               cache->kasan_info.free_meta_offset = *size;
> 6d7b7611 Andrey Konovalov 2018-11-29  245               *size += sizeof(struct kasan_free_meta);
> 6d7b7611 Andrey Konovalov 2018-11-29  246       }
> 6d7b7611 Andrey Konovalov 2018-11-29  247       redzone_adjust = optimal_redzone(cache->object_size) -
> 6d7b7611 Andrey Konovalov 2018-11-29  248               (*size - cache->object_size);
> 6d7b7611 Andrey Konovalov 2018-11-29  249
> 6d7b7611 Andrey Konovalov 2018-11-29  250       if (redzone_adjust > 0)
> 6d7b7611 Andrey Konovalov 2018-11-29  251               *size += redzone_adjust;
> 6d7b7611 Andrey Konovalov 2018-11-29  252
> 6d7b7611 Andrey Konovalov 2018-11-29  253       *size = min_t(unsigned int, KMALLOC_MAX_SIZE,
> 6d7b7611 Andrey Konovalov 2018-11-29  254                       max(*size, cache->object_size +
> 6d7b7611 Andrey Konovalov 2018-11-29  255                                       optimal_redzone(cache->object_size)));
> 6d7b7611 Andrey Konovalov 2018-11-29  256
> 6d7b7611 Andrey Konovalov 2018-11-29  257       /*
> 6d7b7611 Andrey Konovalov 2018-11-29  258        * If the metadata doesn't fit, don't enable KASAN at all.
> 6d7b7611 Andrey Konovalov 2018-11-29  259        */
> 6d7b7611 Andrey Konovalov 2018-11-29  260       if (*size <= cache->kasan_info.alloc_meta_offset ||
> 6d7b7611 Andrey Konovalov 2018-11-29  261                       *size <= cache->kasan_info.free_meta_offset) {
> 6d7b7611 Andrey Konovalov 2018-11-29  262               cache->kasan_info.alloc_meta_offset = 0;
> 6d7b7611 Andrey Konovalov 2018-11-29  263               cache->kasan_info.free_meta_offset = 0;
> 6d7b7611 Andrey Konovalov 2018-11-29  264               *size = orig_size;
> 6d7b7611 Andrey Konovalov 2018-11-29  265               return;
> 6d7b7611 Andrey Konovalov 2018-11-29  266       }
> 6d7b7611 Andrey Konovalov 2018-11-29  267
> 6d7b7611 Andrey Konovalov 2018-11-29  268       *flags |= SLAB_KASAN;
> 6d7b7611 Andrey Konovalov 2018-11-29  269  }
> 6d7b7611 Andrey Konovalov 2018-11-29  270
> 6d7b7611 Andrey Konovalov 2018-11-29  271  size_t kasan_metadata_size(struct kmem_cache *cache)
> 6d7b7611 Andrey Konovalov 2018-11-29  272  {
> 6d7b7611 Andrey Konovalov 2018-11-29  273       return (cache->kasan_info.alloc_meta_offset ?
> 6d7b7611 Andrey Konovalov 2018-11-29  274               sizeof(struct kasan_alloc_meta) : 0) +
> 6d7b7611 Andrey Konovalov 2018-11-29  275               (cache->kasan_info.free_meta_offset ?
> 6d7b7611 Andrey Konovalov 2018-11-29  276               sizeof(struct kasan_free_meta) : 0);
> 6d7b7611 Andrey Konovalov 2018-11-29 @277  }
> 6d7b7611 Andrey Konovalov 2018-11-29  278
> 6d7b7611 Andrey Konovalov 2018-11-29  279  struct kasan_alloc_meta *get_alloc_info(struct kmem_cache *cache,
> 6d7b7611 Andrey Konovalov 2018-11-29  280                                       const void *object)
> 6d7b7611 Andrey Konovalov 2018-11-29  281  {
> 6d7b7611 Andrey Konovalov 2018-11-29  282       BUILD_BUG_ON(sizeof(struct kasan_alloc_meta) > 32);
> 6d7b7611 Andrey Konovalov 2018-11-29  283       return (void *)object + cache->kasan_info.alloc_meta_offset;
> 6d7b7611 Andrey Konovalov 2018-11-29  284  }
> 6d7b7611 Andrey Konovalov 2018-11-29  285
> 6d7b7611 Andrey Konovalov 2018-11-29  286  struct kasan_free_meta *get_free_info(struct kmem_cache *cache,
> 6d7b7611 Andrey Konovalov 2018-11-29  287                                     const void *object)
> 6d7b7611 Andrey Konovalov 2018-11-29  288  {
> 6d7b7611 Andrey Konovalov 2018-11-29  289       BUILD_BUG_ON(sizeof(struct kasan_free_meta) > 32);
> 6d7b7611 Andrey Konovalov 2018-11-29 @290       return (void *)object + cache->kasan_info.free_meta_offset;
> 6d7b7611 Andrey Konovalov 2018-11-29  291  }
> 6d7b7611 Andrey Konovalov 2018-11-29  292
> 6d7b7611 Andrey Konovalov 2018-11-29  293  void kasan_poison_slab(struct page *page)
> 6d7b7611 Andrey Konovalov 2018-11-29  294  {
> 6d7b7611 Andrey Konovalov 2018-11-29  295       kasan_poison_shadow(page_address(page),
> 6d7b7611 Andrey Konovalov 2018-11-29  296                       PAGE_SIZE << compound_order(page),
> 6d7b7611 Andrey Konovalov 2018-11-29  297                       KASAN_KMALLOC_REDZONE);
> 6d7b7611 Andrey Konovalov 2018-11-29  298  }
> 6d7b7611 Andrey Konovalov 2018-11-29  299
> 6d7b7611 Andrey Konovalov 2018-11-29  300  void kasan_unpoison_object_data(struct kmem_cache *cache, void *object)
> 6d7b7611 Andrey Konovalov 2018-11-29  301  {
> 6d7b7611 Andrey Konovalov 2018-11-29  302       kasan_unpoison_shadow(object, cache->object_size);
> 6d7b7611 Andrey Konovalov 2018-11-29  303  }
> 6d7b7611 Andrey Konovalov 2018-11-29  304
> 6d7b7611 Andrey Konovalov 2018-11-29  305  void kasan_poison_object_data(struct kmem_cache *cache, void *object)
> 6d7b7611 Andrey Konovalov 2018-11-29  306  {
> 6d7b7611 Andrey Konovalov 2018-11-29  307       kasan_poison_shadow(object,
> 6d7b7611 Andrey Konovalov 2018-11-29  308                       round_up(cache->object_size, KASAN_SHADOW_SCALE_SIZE),
> 6d7b7611 Andrey Konovalov 2018-11-29  309                       KASAN_KMALLOC_REDZONE);
> 6d7b7611 Andrey Konovalov 2018-11-29  310  }
> 6d7b7611 Andrey Konovalov 2018-11-29  311
> 6d7b7611 Andrey Konovalov 2018-11-29  312  void *kasan_init_slab_obj(struct kmem_cache *cache, const void *object)
> 6d7b7611 Andrey Konovalov 2018-11-29  313  {
> 6d7b7611 Andrey Konovalov 2018-11-29  314       struct kasan_alloc_meta *alloc_info;
> 6d7b7611 Andrey Konovalov 2018-11-29  315
> 6d7b7611 Andrey Konovalov 2018-11-29  316       if (!(cache->flags & SLAB_KASAN))
> 6d7b7611 Andrey Konovalov 2018-11-29  317               return (void *)object;
> 6d7b7611 Andrey Konovalov 2018-11-29  318
> 6d7b7611 Andrey Konovalov 2018-11-29  319       alloc_info = get_alloc_info(cache, object);
> 6d7b7611 Andrey Konovalov 2018-11-29  320       __memset(alloc_info, 0, sizeof(*alloc_info));
> 6d7b7611 Andrey Konovalov 2018-11-29  321
> 6d7b7611 Andrey Konovalov 2018-11-29  322       return (void *)object;
> 6d7b7611 Andrey Konovalov 2018-11-29  323  }
> 6d7b7611 Andrey Konovalov 2018-11-29  324
> 6d7b7611 Andrey Konovalov 2018-11-29  325  void *kasan_slab_alloc(struct kmem_cache *cache, void *object, gfp_t flags)
> 6d7b7611 Andrey Konovalov 2018-11-29  326  {
> 6d7b7611 Andrey Konovalov 2018-11-29  327       return kasan_kmalloc(cache, object, cache->object_size, flags);
> 6d7b7611 Andrey Konovalov 2018-11-29  328  }
> 6d7b7611 Andrey Konovalov 2018-11-29  329
> 6d7b7611 Andrey Konovalov 2018-11-29  330  static bool __kasan_slab_free(struct kmem_cache *cache, void *object,
> 6d7b7611 Andrey Konovalov 2018-11-29  331                             unsigned long ip, bool quarantine)
> 6d7b7611 Andrey Konovalov 2018-11-29  332  {
> 6d7b7611 Andrey Konovalov 2018-11-29  333       s8 shadow_byte;
> 6d7b7611 Andrey Konovalov 2018-11-29  334       unsigned long rounded_up_size;
> 6d7b7611 Andrey Konovalov 2018-11-29  335
> 6d7b7611 Andrey Konovalov 2018-11-29 @336       if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) !=
> 6d7b7611 Andrey Konovalov 2018-11-29  337           object)) {
> 6d7b7611 Andrey Konovalov 2018-11-29  338               kasan_report_invalid_free(object, ip);
> 6d7b7611 Andrey Konovalov 2018-11-29  339               return true;
> 6d7b7611 Andrey Konovalov 2018-11-29  340       }
> 6d7b7611 Andrey Konovalov 2018-11-29  341
> 6d7b7611 Andrey Konovalov 2018-11-29  342       /* RCU slabs could be legally used after free within the RCU period */
> 6d7b7611 Andrey Konovalov 2018-11-29  343       if (unlikely(cache->flags & SLAB_TYPESAFE_BY_RCU))
> 6d7b7611 Andrey Konovalov 2018-11-29  344               return false;
> 6d7b7611 Andrey Konovalov 2018-11-29  345
> 6d7b7611 Andrey Konovalov 2018-11-29  346       shadow_byte = READ_ONCE(*(s8 *)kasan_mem_to_shadow(object));
> 6d7b7611 Andrey Konovalov 2018-11-29  347       if (shadow_byte < 0 || shadow_byte >= KASAN_SHADOW_SCALE_SIZE) {
> 6d7b7611 Andrey Konovalov 2018-11-29  348               kasan_report_invalid_free(object, ip);
> 6d7b7611 Andrey Konovalov 2018-11-29  349               return true;
> 6d7b7611 Andrey Konovalov 2018-11-29  350       }
> 6d7b7611 Andrey Konovalov 2018-11-29  351
> 6d7b7611 Andrey Konovalov 2018-11-29  352       rounded_up_size = round_up(cache->object_size, KASAN_SHADOW_SCALE_SIZE);
> 6d7b7611 Andrey Konovalov 2018-11-29  353       kasan_poison_shadow(object, rounded_up_size, KASAN_KMALLOC_FREE);
> 6d7b7611 Andrey Konovalov 2018-11-29  354
> 6d7b7611 Andrey Konovalov 2018-11-29  355       if (!quarantine || unlikely(!(cache->flags & SLAB_KASAN)))
> 6d7b7611 Andrey Konovalov 2018-11-29  356               return false;
> 6d7b7611 Andrey Konovalov 2018-11-29  357
> 6d7b7611 Andrey Konovalov 2018-11-29  358       set_track(&get_alloc_info(cache, object)->free_track, GFP_NOWAIT);
> 6d7b7611 Andrey Konovalov 2018-11-29  359       quarantine_put(get_free_info(cache, object), cache);
> 6d7b7611 Andrey Konovalov 2018-11-29  360       return true;
> 6d7b7611 Andrey Konovalov 2018-11-29  361  }
> 6d7b7611 Andrey Konovalov 2018-11-29  362
>
> :::::: The code at line 238 was first introduced by commit
> :::::: 6d7b7611ded2d230f527485d39a7e74958de415a kasan: move common generic and tag-based code to common.c
>
> :::::: TO: Andrey Konovalov <andreyknvl@xxxxxxxxxx>
> :::::: CC: Johannes Weiner <hannes@xxxxxxxxxxx>
>
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux