From: Thomas Zimmermann <tzimmermann@suse.de> To: deller@gmx.de, geert+renesas@glider.be, timur@kernel.org, rdunlap@infradead.org, paulus@samba.org, benh@kernel.crashing.org, linux@armlinux.org.uk, pjones@redhat.com, adaplas@gmail.com, s.hauer@pengutronix.de, shawnguo@kernel.org, mbroemme@libmpq.org, thomas@winischhofer.net, James.Bottomley@HansenPartnership.com, sudipm.mukherjee@gmail.com, teddy.wang@siliconmotion.com, corbet@lwn.net Cc: Thomas Zimmermann <tzimmermann@suse.de>, linux-fbdev@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Subject: [PATCH v2 000/101] fbdev: Fix memory leak in option parsing Date: Thu, 9 Mar 2023 17:00:20 +0100 [thread overview] Message-ID: <20230309160201.5163-1-tzimmermann@suse.de> (raw) Introduce struct option_iter and helpers to parse command-line options with comma-separated key-value pairs. Then convert fbdev drivers to the new interface. Fixes a memory leak in the parsing of the video= option. Before commit 73ce73c30ba9 ("fbdev: Transfer video= option strings to caller; clarify ownership"), a call to fb_get_options() either returned an internal string or a duplicated string; hence ownership of the string's memory buffer was not well defined, but depended on how users specified the video= option on the kernel command line. For global settings, the caller owned the returned memory and for per-driver settings, fb_get_options() owned the memory. As calling drivers were unable to detect the case, they had no option but to leak the the memory. Commit 73ce73c30ba9 ("fbdev: Transfer video= option strings to caller; clarify ownership") changed semantics to caller-owned strings. Drivers still leaked the memory, but at least ownership was clear. This patchset fixes the memory leak and changes string ownership back to fb_get_options(). Patch 1 introduces struct option_iter and a few helpers. The interface takes an option string, such as video=, in the common form value1,key2:value2,value3 etc and returns the individual comma-separated pairs. Various modules use this pattern, so the code is located under lib/. Patches 2 to 100 go through fbdev drivers and convert them to the new interface. This often requires a number of cleanups. A driver would typically refer to the option string's video mode. Such strings are now copied to driver-allocated memory so that drivers don't refer directly to the option string's memory. The option iterator then replaces manual parsing loops based on strsep(","). All driver-allocated memory is released by removing the device or unloading the module. Patch 101 finally changes the ownership of the option string to be internal to fb_get_option(); thereby fixing the memory leak. The option iterator holds its own copy of the string and is not affected by the change. Most fbdev drivers only support to parse option strings if they are built-in. I assume that's because of the original fuzzy semantics of fb_get_options(). A later patchset could change the driver to respect video= settings in any configuration. v2: * use kstrdup()/kfree() for video strings (Geert, Timur) * fix iterator docs (Randy) * update iterator interface Thomas Zimmermann (101): lib: Add option iterator fbdev/68328fb: Remove trailing whitespaces fbdev/68328fb: Remove unused option string fbdev/acornfb: Only init fb_info once fbdev/acornfb: Parse option string with struct option_iter fbdev/amifb: Duplicate video-mode option string fbdev/amifb: Parse option string with struct option_iter fbdev/arkfb: Duplicate video-mode option string fbdev/atafb: Duplicate video-mode option string fbdev/atafb: Parse option string with struct option_iter fbdev/aty: Duplicate video-mode option string fbdev/aty: Parse option string with struct option_iter fbdev/au1100fb: Parse option string with struct option_iter fbdev/au1200fb: Parse option string with struct option_iter fbdev/cirrusfb: Duplicate video-mode option string fbdev/cirrusfb: Parse option string with struct option_iter fbdev/controlfb: Remove trailing whitespaces fbdev/controlfb: Parse option string with struct option_iter fbdev/cyber2000fb: Parse option string with struct option_iter fbdev/efifb: Parse option string with struct option_iter fbdev/fm2fb: Parse option string with struct option_iter fbdev/fsl-diu-fb: Duplicate video-mode option string fbdev/fsl-diu-fb: Parse option string with struct option_iter fbdev/gbefb: Duplicate video-mode option string fbdev/gbefb: Parse option string with struct option_iter fbdev/geode: Duplicate video-mode option string fbdev/geode: Parse option string with struct option_iter fbdev/grvga: Duplicate video-mode option string fbdev/grvga: Parse option string with struct option_iter fbdev/gxt4500: Duplicate video-mode option string fbdev/hyperv_fb: Duplicate video-mode option string fbdev/i740fb: Duplicate video-mode option string fbdev/i740fb: Parse option string with struct option_iter fbdev/i810: Duplicate video-mode option string fbdev/i810: Parse option string with struct option_iter fbdev/imsttfb: Parse option string with struct option_iter fbdev/intelfb: Duplicate video-mode option string fbdev/intelfb: Parse option string with struct option_iter fbdev/imxfb: Duplicate video-mode option string fbdev/imxfb: Parse option string with struct option_iter fbdev/kyrofb: Duplicate video-mode option string fbdev/kyrofb: Parse option string with struct option_iter fbdev/macfb: Remove trailing whitespaces fbdev/macfb: Parse option string with struct option_iter fbdev/matroxfb: Parse option string with struct option_iter fbdev/mx3fb: Duplicate video-mode option string fbdev/mx3fb: Parse option string with struct option_iter fbdev/neofb: Duplicate video-mode option string fbdev/neofb: Parse option string with struct option_iter fbdev/nvidiafb: Duplicate video-mode option string fbdev/nvidiafb: Parse option string with struct option_iter fbdev/ocfb: Duplicate video-mode option string fbdev/ocfb: Parse option string with struct option_iter fbdev/omapfb: Parse option string with struct option_iter fbdev/platinumfb: Remove trailing whitespaces fbdev/platinumfb: Parse option string with struct option_iter fbdev/pm2fb: Duplicate video-mode option string fbdev/pm2fb: Parse option string with struct option_iter fbdev/pm3fb: Duplicate video-mode option string fbdev/pm3fb: Parse option string with struct option_iter fbdev/ps3fb: Duplicate video-mode option string fbdev/ps3fb: Parse option string with struct option_iter fbdev/pvr2fb: Duplicate video-mode option string fbdev/pvr2fb: Parse option string with struct option_iter fbdev/pxafb: Parse option string with struct option_iter fbdev/rivafb: Duplicate video-mode option string fbdev/rivafb: Parse option string with struct option_iter fbdev/s3fb: Duplicate video-mode option string fbdev/s3fb: Parse option string with struct option_iter fbdev/savagefb: Duplicate video-mode option string fbdev/savagefb: Parse option string with struct option_iter fbdev/sisfb: Constify mode string fbdev/sisfb: Parse option string with struct option_iter fbdev/skeletonfb: Parse option string with struct option_iter fbdev/sm712fb: Duplicate video-mode option string fbdev/sstfb: Duplicate video-mode option string fbdev/sstfb: Parse option string with struct option_iter fbdev/stifb: Remove trailing whitespaces fbdev/stifb: Constify option string fbdev/tdfxfb: Duplicate video-mode option string fbdev/tdfxfb: Parse option string with struct option_iter fbdev/tgafb: Duplicate video-mode option string fbdev/tgafb: Parse option string with struct option_iter fbdev/tmiofb: Remove unused option string fbdev/tridentfb: Duplicate video-mode option string fbdev/tridentfb: Parse option string with struct option_iter fbdev/uvesafb: Duplicate video-mode option string fbdev/uvesafb: Parse option string with struct option_iter fbdev/valkyriefb: Remove trailing whitespaces fbdev/valkyriefb: Parse option string with struct option_iter fbdev/vermilion: Remove unused option string fbdev/vesafb: Parse option string with struct option_iter fbdev/vfb: Remove trailing whitespaces fbdev/vfb: Duplicate video-mode option string fbdev/vfb: Parse option string with struct option_iter fbdev/viafb: Parse option string with struct option_iter fbdev/vt8623fb: Duplicate video-mode option string staging/sm750fb: Release g_settings in module-exit function staging/sm750fb: Duplicate video-mode option string staging/sm750fb: Parse option string with struct option_iter fbdev: Constify option strings Documentation/core-api/kernel-api.rst | 9 ++ drivers/staging/sm750fb/sm750.c | 63 ++++---- drivers/video/fbdev/68328fb.c | 24 +-- drivers/video/fbdev/acornfb.c | 23 ++- drivers/video/fbdev/amifb.c | 23 +-- drivers/video/fbdev/arkfb.c | 10 +- drivers/video/fbdev/atafb.c | 21 +-- drivers/video/fbdev/aty/aty128fb.c | 22 ++- drivers/video/fbdev/aty/atyfb_base.c | 23 ++- drivers/video/fbdev/aty/radeon_base.c | 26 +-- drivers/video/fbdev/au1100fb.c | 13 +- drivers/video/fbdev/au1200fb.c | 15 +- drivers/video/fbdev/cirrusfb.c | 30 ++-- drivers/video/fbdev/controlfb.c | 47 +++--- drivers/video/fbdev/core/fb_cmdline.c | 13 +- drivers/video/fbdev/core/modedb.c | 8 +- drivers/video/fbdev/cyber2000fb.c | 17 +- drivers/video/fbdev/efifb.c | 44 ++--- drivers/video/fbdev/ep93xx-fb.c | 2 +- drivers/video/fbdev/fm2fb.c | 14 +- drivers/video/fbdev/fsl-diu-fb.c | 24 +-- drivers/video/fbdev/gbefb.c | 23 +-- drivers/video/fbdev/geode/gx1fb_core.c | 16 +- drivers/video/fbdev/geode/gxfb_core.c | 23 +-- drivers/video/fbdev/geode/lxfb_core.c | 25 +-- drivers/video/fbdev/grvga.c | 18 ++- drivers/video/fbdev/gxt4500.c | 13 +- drivers/video/fbdev/hyperv_fb.c | 18 ++- drivers/video/fbdev/i740fb.c | 26 +-- drivers/video/fbdev/i810/i810_main.c | 26 ++- drivers/video/fbdev/imsttfb.c | 16 +- drivers/video/fbdev/imxfb.c | 21 +-- drivers/video/fbdev/intelfb/intelfbdrv.c | 23 ++- drivers/video/fbdev/kyro/fbdev.c | 21 ++- drivers/video/fbdev/macfb.c | 26 +-- drivers/video/fbdev/matrox/matroxfb_base.c | 19 +-- drivers/video/fbdev/mx3fb.c | 23 ++- drivers/video/fbdev/neofb.c | 26 +-- drivers/video/fbdev/nvidia/nvidia.c | 26 ++- drivers/video/fbdev/ocfb.c | 21 ++- drivers/video/fbdev/omap/omapfb_main.c | 15 +- drivers/video/fbdev/platinumfb.c | 44 ++--- drivers/video/fbdev/pm2fb.c | 25 +-- drivers/video/fbdev/pm3fb.c | 27 ++-- drivers/video/fbdev/ps3fb.c | 28 ++-- drivers/video/fbdev/pvr2fb.c | 32 ++-- drivers/video/fbdev/pxafb.c | 18 ++- drivers/video/fbdev/riva/fbdev.c | 26 ++- drivers/video/fbdev/s3fb.c | 27 ++-- drivers/video/fbdev/savage/savagefb_driver.c | 20 ++- drivers/video/fbdev/sis/sis_main.c | 24 +-- drivers/video/fbdev/skeletonfb.c | 17 +- drivers/video/fbdev/sm712fb.c | 12 +- drivers/video/fbdev/sstfb.c | 25 +-- drivers/video/fbdev/stifb.c | 162 +++++++++---------- drivers/video/fbdev/tdfxfb.c | 21 ++- drivers/video/fbdev/tgafb.c | 30 ++-- drivers/video/fbdev/tmiofb.c | 24 +-- drivers/video/fbdev/tridentfb.c | 27 ++-- drivers/video/fbdev/uvesafb.c | 21 ++- drivers/video/fbdev/valkyriefb.c | 30 ++-- drivers/video/fbdev/vermilion/vermilion.c | 7 +- drivers/video/fbdev/vesafb.c | 16 +- drivers/video/fbdev/vfb.c | 35 ++-- drivers/video/fbdev/via/viafbdev.c | 15 +- drivers/video/fbdev/vt8623fb.c | 11 +- include/linux/cmdline.h | 36 +++++ include/linux/fb.h | 2 +- lib/Makefile | 2 +- lib/cmdline_iter.c | 109 +++++++++++++ 70 files changed, 1087 insertions(+), 682 deletions(-) create mode 100644 include/linux/cmdline.h create mode 100644 lib/cmdline_iter.c -- 2.39.2
WARNING: multiple messages have this Message-ID (diff)
From: Thomas Zimmermann <tzimmermann@suse.de> To: deller@gmx.de, geert+renesas@glider.be, timur@kernel.org, rdunlap@infradead.org, paulus@samba.org, benh@kernel.crashing.org, linux@armlinux.org.uk, pjones@redhat.com, adaplas@gmail.com, s.hauer@pengutronix.de, shawnguo@kernel.org, mbroemme@libmpq.org, thomas@winischhofer.net, James.Bottomley@HansenPartnership.com, sudipm.mukherjee@gmail.com, teddy.wang@siliconmotion.com, corbet@lwn.net Cc: linux-fbdev@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Thomas Zimmermann <tzimmermann@suse.de> Subject: [PATCH v2 000/101] fbdev: Fix memory leak in option parsing Date: Thu, 9 Mar 2023 17:00:20 +0100 [thread overview] Message-ID: <20230309160201.5163-1-tzimmermann@suse.de> (raw) Introduce struct option_iter and helpers to parse command-line options with comma-separated key-value pairs. Then convert fbdev drivers to the new interface. Fixes a memory leak in the parsing of the video= option. Before commit 73ce73c30ba9 ("fbdev: Transfer video= option strings to caller; clarify ownership"), a call to fb_get_options() either returned an internal string or a duplicated string; hence ownership of the string's memory buffer was not well defined, but depended on how users specified the video= option on the kernel command line. For global settings, the caller owned the returned memory and for per-driver settings, fb_get_options() owned the memory. As calling drivers were unable to detect the case, they had no option but to leak the the memory. Commit 73ce73c30ba9 ("fbdev: Transfer video= option strings to caller; clarify ownership") changed semantics to caller-owned strings. Drivers still leaked the memory, but at least ownership was clear. This patchset fixes the memory leak and changes string ownership back to fb_get_options(). Patch 1 introduces struct option_iter and a few helpers. The interface takes an option string, such as video=, in the common form value1,key2:value2,value3 etc and returns the individual comma-separated pairs. Various modules use this pattern, so the code is located under lib/. Patches 2 to 100 go through fbdev drivers and convert them to the new interface. This often requires a number of cleanups. A driver would typically refer to the option string's video mode. Such strings are now copied to driver-allocated memory so that drivers don't refer directly to the option string's memory. The option iterator then replaces manual parsing loops based on strsep(","). All driver-allocated memory is released by removing the device or unloading the module. Patch 101 finally changes the ownership of the option string to be internal to fb_get_option(); thereby fixing the memory leak. The option iterator holds its own copy of the string and is not affected by the change. Most fbdev drivers only support to parse option strings if they are built-in. I assume that's because of the original fuzzy semantics of fb_get_options(). A later patchset could change the driver to respect video= settings in any configuration. v2: * use kstrdup()/kfree() for video strings (Geert, Timur) * fix iterator docs (Randy) * update iterator interface Thomas Zimmermann (101): lib: Add option iterator fbdev/68328fb: Remove trailing whitespaces fbdev/68328fb: Remove unused option string fbdev/acornfb: Only init fb_info once fbdev/acornfb: Parse option string with struct option_iter fbdev/amifb: Duplicate video-mode option string fbdev/amifb: Parse option string with struct option_iter fbdev/arkfb: Duplicate video-mode option string fbdev/atafb: Duplicate video-mode option string fbdev/atafb: Parse option string with struct option_iter fbdev/aty: Duplicate video-mode option string fbdev/aty: Parse option string with struct option_iter fbdev/au1100fb: Parse option string with struct option_iter fbdev/au1200fb: Parse option string with struct option_iter fbdev/cirrusfb: Duplicate video-mode option string fbdev/cirrusfb: Parse option string with struct option_iter fbdev/controlfb: Remove trailing whitespaces fbdev/controlfb: Parse option string with struct option_iter fbdev/cyber2000fb: Parse option string with struct option_iter fbdev/efifb: Parse option string with struct option_iter fbdev/fm2fb: Parse option string with struct option_iter fbdev/fsl-diu-fb: Duplicate video-mode option string fbdev/fsl-diu-fb: Parse option string with struct option_iter fbdev/gbefb: Duplicate video-mode option string fbdev/gbefb: Parse option string with struct option_iter fbdev/geode: Duplicate video-mode option string fbdev/geode: Parse option string with struct option_iter fbdev/grvga: Duplicate video-mode option string fbdev/grvga: Parse option string with struct option_iter fbdev/gxt4500: Duplicate video-mode option string fbdev/hyperv_fb: Duplicate video-mode option string fbdev/i740fb: Duplicate video-mode option string fbdev/i740fb: Parse option string with struct option_iter fbdev/i810: Duplicate video-mode option string fbdev/i810: Parse option string with struct option_iter fbdev/imsttfb: Parse option string with struct option_iter fbdev/intelfb: Duplicate video-mode option string fbdev/intelfb: Parse option string with struct option_iter fbdev/imxfb: Duplicate video-mode option string fbdev/imxfb: Parse option string with struct option_iter fbdev/kyrofb: Duplicate video-mode option string fbdev/kyrofb: Parse option string with struct option_iter fbdev/macfb: Remove trailing whitespaces fbdev/macfb: Parse option string with struct option_iter fbdev/matroxfb: Parse option string with struct option_iter fbdev/mx3fb: Duplicate video-mode option string fbdev/mx3fb: Parse option string with struct option_iter fbdev/neofb: Duplicate video-mode option string fbdev/neofb: Parse option string with struct option_iter fbdev/nvidiafb: Duplicate video-mode option string fbdev/nvidiafb: Parse option string with struct option_iter fbdev/ocfb: Duplicate video-mode option string fbdev/ocfb: Parse option string with struct option_iter fbdev/omapfb: Parse option string with struct option_iter fbdev/platinumfb: Remove trailing whitespaces fbdev/platinumfb: Parse option string with struct option_iter fbdev/pm2fb: Duplicate video-mode option string fbdev/pm2fb: Parse option string with struct option_iter fbdev/pm3fb: Duplicate video-mode option string fbdev/pm3fb: Parse option string with struct option_iter fbdev/ps3fb: Duplicate video-mode option string fbdev/ps3fb: Parse option string with struct option_iter fbdev/pvr2fb: Duplicate video-mode option string fbdev/pvr2fb: Parse option string with struct option_iter fbdev/pxafb: Parse option string with struct option_iter fbdev/rivafb: Duplicate video-mode option string fbdev/rivafb: Parse option string with struct option_iter fbdev/s3fb: Duplicate video-mode option string fbdev/s3fb: Parse option string with struct option_iter fbdev/savagefb: Duplicate video-mode option string fbdev/savagefb: Parse option string with struct option_iter fbdev/sisfb: Constify mode string fbdev/sisfb: Parse option string with struct option_iter fbdev/skeletonfb: Parse option string with struct option_iter fbdev/sm712fb: Duplicate video-mode option string fbdev/sstfb: Duplicate video-mode option string fbdev/sstfb: Parse option string with struct option_iter fbdev/stifb: Remove trailing whitespaces fbdev/stifb: Constify option string fbdev/tdfxfb: Duplicate video-mode option string fbdev/tdfxfb: Parse option string with struct option_iter fbdev/tgafb: Duplicate video-mode option string fbdev/tgafb: Parse option string with struct option_iter fbdev/tmiofb: Remove unused option string fbdev/tridentfb: Duplicate video-mode option string fbdev/tridentfb: Parse option string with struct option_iter fbdev/uvesafb: Duplicate video-mode option string fbdev/uvesafb: Parse option string with struct option_iter fbdev/valkyriefb: Remove trailing whitespaces fbdev/valkyriefb: Parse option string with struct option_iter fbdev/vermilion: Remove unused option string fbdev/vesafb: Parse option string with struct option_iter fbdev/vfb: Remove trailing whitespaces fbdev/vfb: Duplicate video-mode option string fbdev/vfb: Parse option string with struct option_iter fbdev/viafb: Parse option string with struct option_iter fbdev/vt8623fb: Duplicate video-mode option string staging/sm750fb: Release g_settings in module-exit function staging/sm750fb: Duplicate video-mode option string staging/sm750fb: Parse option string with struct option_iter fbdev: Constify option strings Documentation/core-api/kernel-api.rst | 9 ++ drivers/staging/sm750fb/sm750.c | 63 ++++---- drivers/video/fbdev/68328fb.c | 24 +-- drivers/video/fbdev/acornfb.c | 23 ++- drivers/video/fbdev/amifb.c | 23 +-- drivers/video/fbdev/arkfb.c | 10 +- drivers/video/fbdev/atafb.c | 21 +-- drivers/video/fbdev/aty/aty128fb.c | 22 ++- drivers/video/fbdev/aty/atyfb_base.c | 23 ++- drivers/video/fbdev/aty/radeon_base.c | 26 +-- drivers/video/fbdev/au1100fb.c | 13 +- drivers/video/fbdev/au1200fb.c | 15 +- drivers/video/fbdev/cirrusfb.c | 30 ++-- drivers/video/fbdev/controlfb.c | 47 +++--- drivers/video/fbdev/core/fb_cmdline.c | 13 +- drivers/video/fbdev/core/modedb.c | 8 +- drivers/video/fbdev/cyber2000fb.c | 17 +- drivers/video/fbdev/efifb.c | 44 ++--- drivers/video/fbdev/ep93xx-fb.c | 2 +- drivers/video/fbdev/fm2fb.c | 14 +- drivers/video/fbdev/fsl-diu-fb.c | 24 +-- drivers/video/fbdev/gbefb.c | 23 +-- drivers/video/fbdev/geode/gx1fb_core.c | 16 +- drivers/video/fbdev/geode/gxfb_core.c | 23 +-- drivers/video/fbdev/geode/lxfb_core.c | 25 +-- drivers/video/fbdev/grvga.c | 18 ++- drivers/video/fbdev/gxt4500.c | 13 +- drivers/video/fbdev/hyperv_fb.c | 18 ++- drivers/video/fbdev/i740fb.c | 26 +-- drivers/video/fbdev/i810/i810_main.c | 26 ++- drivers/video/fbdev/imsttfb.c | 16 +- drivers/video/fbdev/imxfb.c | 21 +-- drivers/video/fbdev/intelfb/intelfbdrv.c | 23 ++- drivers/video/fbdev/kyro/fbdev.c | 21 ++- drivers/video/fbdev/macfb.c | 26 +-- drivers/video/fbdev/matrox/matroxfb_base.c | 19 +-- drivers/video/fbdev/mx3fb.c | 23 ++- drivers/video/fbdev/neofb.c | 26 +-- drivers/video/fbdev/nvidia/nvidia.c | 26 ++- drivers/video/fbdev/ocfb.c | 21 ++- drivers/video/fbdev/omap/omapfb_main.c | 15 +- drivers/video/fbdev/platinumfb.c | 44 ++--- drivers/video/fbdev/pm2fb.c | 25 +-- drivers/video/fbdev/pm3fb.c | 27 ++-- drivers/video/fbdev/ps3fb.c | 28 ++-- drivers/video/fbdev/pvr2fb.c | 32 ++-- drivers/video/fbdev/pxafb.c | 18 ++- drivers/video/fbdev/riva/fbdev.c | 26 ++- drivers/video/fbdev/s3fb.c | 27 ++-- drivers/video/fbdev/savage/savagefb_driver.c | 20 ++- drivers/video/fbdev/sis/sis_main.c | 24 +-- drivers/video/fbdev/skeletonfb.c | 17 +- drivers/video/fbdev/sm712fb.c | 12 +- drivers/video/fbdev/sstfb.c | 25 +-- drivers/video/fbdev/stifb.c | 162 +++++++++---------- drivers/video/fbdev/tdfxfb.c | 21 ++- drivers/video/fbdev/tgafb.c | 30 ++-- drivers/video/fbdev/tmiofb.c | 24 +-- drivers/video/fbdev/tridentfb.c | 27 ++-- drivers/video/fbdev/uvesafb.c | 21 ++- drivers/video/fbdev/valkyriefb.c | 30 ++-- drivers/video/fbdev/vermilion/vermilion.c | 7 +- drivers/video/fbdev/vesafb.c | 16 +- drivers/video/fbdev/vfb.c | 35 ++-- drivers/video/fbdev/via/viafbdev.c | 15 +- drivers/video/fbdev/vt8623fb.c | 11 +- include/linux/cmdline.h | 36 +++++ include/linux/fb.h | 2 +- lib/Makefile | 2 +- lib/cmdline_iter.c | 109 +++++++++++++ 70 files changed, 1087 insertions(+), 682 deletions(-) create mode 100644 include/linux/cmdline.h create mode 100644 lib/cmdline_iter.c -- 2.39.2
next reply other threads:[~2023-03-09 16:02 UTC|newest] Thread overview: 224+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-03-09 16:00 Thomas Zimmermann [this message] 2023-03-09 16:00 ` [PATCH v2 000/101] fbdev: Fix memory leak in option parsing Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 001/101] lib: Add option iterator Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-10 8:21 ` Geert Uytterhoeven 2023-03-10 8:21 ` Geert Uytterhoeven 2023-03-10 12:38 ` Thomas Zimmermann 2023-03-10 12:38 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 002/101] fbdev/68328fb: Remove trailing whitespaces Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 003/101] fbdev/68328fb: Remove unused option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 004/101] fbdev/acornfb: Only init fb_info once Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 005/101] fbdev/acornfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 006/101] fbdev/amifb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 007/101] fbdev/amifb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 008/101] fbdev/arkfb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 009/101] fbdev/atafb: " Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 010/101] fbdev/atafb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 011/101] fbdev/aty: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 012/101] fbdev/aty: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 013/101] fbdev/au1100fb: " Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 014/101] fbdev/au1200fb: " Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 015/101] fbdev/cirrusfb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 016/101] fbdev/cirrusfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 017/101] fbdev/controlfb: Remove trailing whitespaces Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 018/101] fbdev/controlfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 019/101] fbdev/cyber2000fb: " Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 020/101] fbdev/efifb: " Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 021/101] fbdev/fm2fb: " Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 022/101] fbdev/fsl-diu-fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 023/101] fbdev/fsl-diu-fb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 024/101] fbdev/gbefb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 025/101] fbdev/gbefb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 026/101] fbdev/geode: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 027/101] fbdev/geode: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 028/101] fbdev/grvga: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 029/101] fbdev/grvga: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 030/101] fbdev/gxt4500: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 031/101] fbdev/hyperv_fb: " Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-12 10:51 ` Michael Kelley (LINUX) 2023-03-12 10:51 ` Michael Kelley (LINUX) 2023-03-09 16:00 ` [PATCH v2 032/101] fbdev/i740fb: " Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 033/101] fbdev/i740fb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 034/101] fbdev/i810: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 035/101] fbdev/i810: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 036/101] fbdev/imsttfb: " Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 037/101] fbdev/intelfb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 038/101] fbdev/intelfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:00 ` [PATCH v2 039/101] fbdev/imxfb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:00 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 040/101] fbdev/imxfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 041/101] fbdev/kyrofb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 042/101] fbdev/kyrofb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 043/101] fbdev/macfb: Remove trailing whitespaces Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 044/101] fbdev/macfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 045/101] fbdev/matroxfb: " Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 046/101] fbdev/mx3fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 047/101] fbdev/mx3fb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 048/101] fbdev/neofb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 049/101] fbdev/neofb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 050/101] fbdev/nvidiafb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 051/101] fbdev/nvidiafb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 052/101] fbdev/ocfb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 053/101] fbdev/ocfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 054/101] fbdev/omapfb: " Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 055/101] fbdev/platinumfb: Remove trailing whitespaces Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 056/101] fbdev/platinumfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 057/101] fbdev/pm2fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 058/101] fbdev/pm2fb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 059/101] fbdev/pm3fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 060/101] fbdev/pm3fb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 061/101] fbdev/ps3fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-10 8:18 ` Geert Uytterhoeven 2023-03-10 8:18 ` Geert Uytterhoeven 2023-03-10 12:21 ` Thomas Zimmermann 2023-03-10 12:21 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 062/101] fbdev/ps3fb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 063/101] fbdev/pvr2fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 064/101] fbdev/pvr2fb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 065/101] fbdev/pxafb: " Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 066/101] fbdev/rivafb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 067/101] fbdev/rivafb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 068/101] fbdev/s3fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 069/101] fbdev/s3fb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 070/101] fbdev/savagefb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 071/101] fbdev/savagefb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 072/101] fbdev/sisfb: Constify mode string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 073/101] fbdev/sisfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 074/101] fbdev/skeletonfb: " Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 075/101] fbdev/sm712fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 076/101] fbdev/sstfb: " Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 077/101] fbdev/sstfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 078/101] fbdev/stifb: Remove trailing whitespaces Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 079/101] fbdev/stifb: Constify option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 080/101] fbdev/tdfxfb: Duplicate video-mode " Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 081/101] fbdev/tdfxfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 082/101] fbdev/tgafb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 083/101] fbdev/tgafb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 084/101] fbdev/tmiofb: Remove unused option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 085/101] fbdev/tridentfb: Duplicate video-mode " Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 086/101] fbdev/tridentfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 087/101] fbdev/uvesafb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 088/101] fbdev/uvesafb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 089/101] fbdev/valkyriefb: Remove trailing whitespaces Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 090/101] fbdev/valkyriefb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 091/101] fbdev/vermilion: Remove unused option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 092/101] fbdev/vesafb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 093/101] fbdev/vfb: Remove trailing whitespaces Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 094/101] fbdev/vfb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 095/101] fbdev/vfb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 096/101] fbdev/viafb: " Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 097/101] fbdev/vt8623fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 098/101] staging/sm750fb: Release g_settings in module-exit function Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:01 ` [PATCH v2 099/101] staging/sm750fb: Duplicate video-mode option string Thomas Zimmermann 2023-03-09 16:01 ` Thomas Zimmermann 2023-03-09 16:02 ` [PATCH v2 100/101] staging/sm750fb: Parse option string with struct option_iter Thomas Zimmermann 2023-03-09 16:02 ` Thomas Zimmermann 2023-03-09 16:02 ` [PATCH v2 101/101] fbdev: Constify option strings Thomas Zimmermann 2023-03-09 16:02 ` Thomas Zimmermann 2023-03-10 8:24 ` [PATCH v2 000/101] fbdev: Fix memory leak in option parsing Geert Uytterhoeven 2023-03-10 8:24 ` Geert Uytterhoeven 2023-03-10 12:44 ` Thomas Zimmermann 2023-03-10 12:44 ` Thomas Zimmermann 2023-03-20 10:07 ` Thomas Zimmermann 2023-03-20 10:07 ` Thomas Zimmermann 2023-03-20 19:25 ` Helge Deller 2023-03-20 19:25 ` Helge Deller 2023-03-21 8:53 ` Thomas Zimmermann 2023-03-21 8:53 ` Thomas Zimmermann
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230309160201.5163-1-tzimmermann@suse.de \ --to=tzimmermann@suse.de \ --cc=James.Bottomley@HansenPartnership.com \ --cc=adaplas@gmail.com \ --cc=benh@kernel.crashing.org \ --cc=corbet@lwn.net \ --cc=deller@gmx.de \ --cc=dri-devel@lists.freedesktop.org \ --cc=geert+renesas@glider.be \ --cc=linux-fbdev@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux@armlinux.org.uk \ --cc=mbroemme@libmpq.org \ --cc=paulus@samba.org \ --cc=pjones@redhat.com \ --cc=rdunlap@infradead.org \ --cc=s.hauer@pengutronix.de \ --cc=shawnguo@kernel.org \ --cc=sudipm.mukherjee@gmail.com \ --cc=teddy.wang@siliconmotion.com \ --cc=thomas@winischhofer.net \ --cc=timur@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.