Thomas Zimmermann <tzimmermann@xxxxxxx> writes: > In fb_get_options(), always duplicate the returned option string and > transfer ownership of the memory to the function's caller. > > Until now, only the global option string got duplicated and transferred > to the caller; the per-driver options were owned by fb_get_options(). > In the end, it was impossible for the function's caller to detect if > it had to release the string's memory buffer. Hence, all calling drivers > leak the memory buffer. The leaks have existed ever since, but drivers > only call fb_get_option() once as part of module initialization. So the > amount of leaked memory is not significant. > > Fix the semantics of fb_get_option() by unconditionally transferring > ownership of the memory buffer to the caller. Later patches can resolve > the memory leaks in the fbdev drivers. > > Signed-off-by: Thomas Zimmermann <tzimmermann@xxxxxxx> > --- [...] > + if (option) { > + if (options) > + *option = kstrdup(options, GFP_KERNEL); > + else > + *option = NULL; > + } > I know the old code wasn't checking if kstrdup() succeeded, but you should do it here and let the caller know. And same if (!options). So I guess the following check can be added (to be consistent with the rest of the code): if (!*option) retval = 1; > return retval; > } > -- > 2.39.1 Best regards, Javier