Re: [PATCH v2] dm-pcache: reject option groups without values

Zheng Gu <[email protected]>
Newsgroups dev.linux.lists.dm-devel,org.kernel.vger.linux-kernel
Message-ID <CADSj-VoDRhF+01FCjNLmbCRarxc8u6c_JLHfmePAOG9gfhT7EQ@mail.gmail.com>
On Mon, Jun 29, 2026 at 11:48 PM Samuel Moelius
<[email protected]> wrote:
>
> The pcache target parses optional arguments as name/value pairs.  A
> table that advertises one optional argument and supplies only a
> recognized option name, for example "cache_mode", reaches
> parse_cache_opts() with argc == 1.  The parser consumes the name,
> decrements argc to zero, then calls dm_shift_arg() again for the value.
> dm_shift_arg() returns NULL when no arguments remain, and the following
> strcmp() dereferences that NULL pointer.
>
> Check that each recognized option has a value before consuming it.  This
> keeps valid "cache_mode writeback" and "data_crc true/false" tables
> unchanged while making malformed tables fail during target construction
> with a precise missing-value error.
>
> Assisted-by: Codex:gpt-5.5-cyber-preview
> Signed-off-by: Samuel Moelius <[email protected]>
> ---
> Changes in v2:
>   - Verify required arguments in a more flexible way
>
>  drivers/md/dm-pcache/dm_pcache.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/drivers/md/dm-pcache/dm_pcache.c b/drivers/md/dm-pcache/dm_pcache.c
> index 81c795c0400e..d5cfd162c063 100644
> --- a/drivers/md/dm-pcache/dm_pcache.c
> +++ b/drivers/md/dm-pcache/dm_pcache.c
> @@ -168,6 +168,10 @@ static int parse_cache_opts(struct dm_pcache *pcache, struct dm_arg_set *as,
>                 argc--;
>
>                 if (!strcmp(arg, "cache_mode")) {
> +                       if (!argc) {
> +                               *error = "Missing value for cache_mode";
> +                               return -EINVAL;
> +                       }
>                         arg = dm_shift_arg(as);
>                         if (!strcmp(arg, "writeback")) {
>                                 opts->cache_mode = PCACHE_CACHE_MODE_WRITEBACK;
> @@ -177,6 +181,10 @@ static int parse_cache_opts(struct dm_pcache *pcache, struct dm_arg_set *as,
>                         }
>                         argc--;
>                 } else if (!strcmp(arg, "data_crc")) {
> +                       if (!argc) {
> +                               *error = "Missing value for data_crc";
> +                               return -EINVAL;
> +                       }
>                         arg = dm_shift_arg(as);
>                         if (!strcmp(arg, "true")) {
>                                 opts->data_crc = true;
> --
> 2.43.0
>

Reviewed-by:  Zheng Gu <[email protected]>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.