lkml.org 
[lkml]   [2019]   [Feb]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.20 294/352] lib/test_rhashtable: Make test_insert_dup() allocate its hash table dynamically
    Date
    4.20-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Bart Van Assche <bvanassche@acm.org>

    [ Upstream commit fc42a689c4c097859e5bd37b5ea11b60dc426df6 ]

    The test_insert_dup() function from lib/test_rhashtable.c passes a
    pointer to a stack object to rhltable_init(). Allocate the hash table
    dynamically to avoid that the following is reported with object
    debugging enabled:

    ODEBUG: object (ptrval) is on stack (ptrval), but NOT annotated.
    WARNING: CPU: 0 PID: 1 at lib/debugobjects.c:368 __debug_object_init+0x312/0x480
    Modules linked in:
    EIP: __debug_object_init+0x312/0x480
    Call Trace:
    ? debug_object_init+0x1a/0x20
    ? __init_work+0x16/0x30
    ? rhashtable_init+0x1e1/0x460
    ? sched_clock_cpu+0x57/0xe0
    ? rhltable_init+0xb/0x20
    ? test_insert_dup+0x32/0x20f
    ? trace_hardirqs_on+0x38/0xf0
    ? ida_dump+0x10/0x10
    ? jhash+0x130/0x130
    ? my_hashfn+0x30/0x30
    ? test_rht_init+0x6aa/0xab4
    ? ida_dump+0x10/0x10
    ? test_rhltable+0xc5c/0xc5c
    ? do_one_initcall+0x67/0x28e
    ? trace_hardirqs_off+0x22/0xe0
    ? restore_all_kernel+0xf/0x70
    ? trace_hardirqs_on_thunk+0xc/0x10
    ? restore_all_kernel+0xf/0x70
    ? kernel_init_freeable+0x142/0x213
    ? rest_init+0x230/0x230
    ? kernel_init+0x10/0x110
    ? schedule_tail_wrapper+0x9/0xc
    ? ret_from_fork+0x19/0x24

    Cc: Thomas Graf <tgraf@suug.ch>
    Cc: Herbert Xu <herbert@gondor.apana.org.au>
    Cc: netdev@vger.kernel.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Bart Van Assche <bvanassche@acm.org>
    Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    lib/test_rhashtable.c | 23 +++++++++++++++--------
    1 file changed, 15 insertions(+), 8 deletions(-)

    --- a/lib/test_rhashtable.c
    +++ b/lib/test_rhashtable.c
    @@ -541,38 +541,45 @@ static unsigned int __init print_ht(stru
    static int __init test_insert_dup(struct test_obj_rhl *rhl_test_objects,
    int cnt, bool slow)
    {
    - struct rhltable rhlt;
    + struct rhltable *rhlt;
    unsigned int i, ret;
    const char *key;
    int err = 0;

    - err = rhltable_init(&rhlt, &test_rht_params_dup);
    - if (WARN_ON(err))
    + rhlt = kmalloc(sizeof(*rhlt), GFP_KERNEL);
    + if (WARN_ON(!rhlt))
    + return -EINVAL;
    +
    + err = rhltable_init(rhlt, &test_rht_params_dup);
    + if (WARN_ON(err)) {
    + kfree(rhlt);
    return err;
    + }

    for (i = 0; i < cnt; i++) {
    rhl_test_objects[i].value.tid = i;
    - key = rht_obj(&rhlt.ht, &rhl_test_objects[i].list_node.rhead);
    + key = rht_obj(&rhlt->ht, &rhl_test_objects[i].list_node.rhead);
    key += test_rht_params_dup.key_offset;

    if (slow) {
    - err = PTR_ERR(rhashtable_insert_slow(&rhlt.ht, key,
    + err = PTR_ERR(rhashtable_insert_slow(&rhlt->ht, key,
    &rhl_test_objects[i].list_node.rhead));
    if (err == -EAGAIN)
    err = 0;
    } else
    - err = rhltable_insert(&rhlt,
    + err = rhltable_insert(rhlt,
    &rhl_test_objects[i].list_node,
    test_rht_params_dup);
    if (WARN(err, "error %d on element %d/%d (%s)\n", err, i, cnt, slow? "slow" : "fast"))
    goto skip_print;
    }

    - ret = print_ht(&rhlt);
    + ret = print_ht(rhlt);
    WARN(ret != cnt, "missing rhltable elements (%d != %d, %s)\n", ret, cnt, slow? "slow" : "fast");

    skip_print:
    - rhltable_destroy(&rhlt);
    + rhltable_destroy(rhlt);
    + kfree(rhlt);

    return 0;
    }

    \
     
     \ /
      Last update: 2019-02-11 16:56    [W:3.801 / U:0.616 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site