On Sun, 14 Apr 2019, Andy Lutomirski wrote:
> > +               struct stack_trace trace = {
> > +                       .max_entries    = size - 4;
> > +                       .entries        = addr;
> > +                       .skip           = 3;
> > +               };
> 
> This looks correct, but I think that it would have been clearer if you
> left the size -= 3 above.  You're still incrementing addr, but you're
> not decrementing size, so they're out of sync and the resulting code
> is hard to follow.

What about the below?

--- a/mm/slab.c
+++ b/mm/slab.c
@@ -1480,10 +1480,12 @@ static void store_stackinfo(struct kmem_
        *addr++ = 0x12345678;
        *addr++ = caller;
        *addr++ = smp_processor_id();
+       size -= 3;
 #ifdef CONFIG_STACKTRACE
        {
                struct stack_trace trace = {
-                       .max_entries    = size - 4;
+                       /* Leave one for the end marker below */
+                       .max_entries    = size - 1;
                        .entries        = addr;
                        .skip           = 3;
                };

Reply via email to