lkml.org 
[lkml]   [2023]   [Jun]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 17/24] kcov: use vmalloc_array and vcalloc
    Date
    Use vmalloc_array and vcalloc to protect against
    multiplication overflows.

    The changes were done using the following Coccinelle
    semantic patch:

    // <smpl>
    @initialize:ocaml@
    @@

    let rename alloc =
    match alloc with
    "vmalloc" -> "vmalloc_array"
    | "vzalloc" -> "vcalloc"
    | _ -> failwith "unknown"

    @@
    size_t e1,e2;
    constant C1, C2;
    expression E1, E2, COUNT, x1, x2, x3;
    typedef u8;
    typedef __u8;
    type t = {u8,__u8,char,unsigned char};
    identifier alloc = {vmalloc,vzalloc};
    fresh identifier realloc = script:ocaml(alloc) { rename alloc };
    @@

    (
    alloc(x1*x2*x3)
    |
    alloc(C1 * C2)
    |
    alloc((sizeof(t)) * (COUNT), ...)
    |
    - alloc((e1) * (e2))
    + realloc(e1, e2)
    |
    - alloc((e1) * (COUNT))
    + realloc(COUNT, e1)
    |
    - alloc((E1) * (E2))
    + realloc(E1, E2)
    )
    // </smpl>

    Signed-off-by: Julia Lawall <Julia.Lawall@inria.fr>

    ---
    v2: Use vmalloc_array and vcalloc instead of array_size.
    This also leaves a multiplication of a constant by a sizeof
    as is. Two patches are thus dropped from the series.

    kernel/kcov.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff -u -p a/kernel/kcov.c b/kernel/kcov.c
    --- a/kernel/kcov.c
    +++ b/kernel/kcov.c
    @@ -901,7 +901,7 @@ void kcov_remote_start(u64 handle)
    /* Can only happen when in_task(). */
    if (!area) {
    local_unlock_irqrestore(&kcov_percpu_data.lock, flags);
    - area = vmalloc(size * sizeof(unsigned long));
    + area = vmalloc_array(size, sizeof(unsigned long));
    if (!area) {
    kcov_put(kcov);
    return;
    \
     
     \ /
      Last update: 2023-06-27 16:49    [W:2.576 / U:0.520 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site