Re: [PATCH 6/7] tracing: reset ring buffer when removing moduleswith events

From: Li Zefan
Date: Wed May 06 2009 - 23:50:37 EST


> From: Steven Rostedt <srostedt@xxxxxxxxxx>
>
> Li Zefan found that there's a race using the event ids of events and
> modules. When a module is loaded, an event id is incremented. We only
> have 16 bits for event ids (65536) and there is a possible (but highly
> unlikely) race that we could load and unload a module that registers
> events so many times that the event id counter overflows.
>
> When it overflows, it then restarts and goes looking for available
> ids. An id is available if it was added by a module and released.
>
> The race is if you have one module add an id, and then is removed.
> Another module loaded can use that same event id. But if the old module
> still had events in the ring buffer, the new module's call back would
> get bogus data. At best (and most likely) the output would just be
> garbage. But if the module for some reason used pointers (not recommended)
> then this could potentially crash.
>
> The safest thing to do is just reset the ring buffer if a module that
> registered events is removed.
>
> [ Impact: prevent unpredictable results of event id overflows ]
>
> Reported-by: Li Zefan <lizf@xxxxxxxxxxxxxx>
> LKML-Reference: <49FEAFD0.30106@xxxxxxxxxxxxxx>
> Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx>

Reviewed-by: Li Zefan <lizf@xxxxxxxxxxxxxx>

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/