On Tue, 15 Nov 2022 20:44:41 +0000 Junxiao Shi <g...@mail1.yoursunny.com> wrote:
> +static int > +memif_set_owner_uid(const char *key __rte_unused, const char *value, void > *extra_args) > +{ > + uid_t *uid = (uid_t *)extra_args; > + *uid = strtoul(value, NULL, 10); > + return 0; > +} > + > +static int > +memif_set_owner_gid(const char *key __rte_unused, const char *value, void > *extra_args) > +{ > + gid_t *gid = (gid_t *)extra_args; > + *gid = strtoul(value, NULL, 10); > + return 0; > +} > + This should be one function and it should check for valid arguments. Things like not a number, extra characters, and out of range. Modern Linux allows 32 bits of uid. with some values like -1 reserved. On a 64 bit system like most DPDK usage, sizeof(unsigned long) is 64 bits. Since uid and gid have same restrictions, then something like this (untested): static int strtouid(const char *value, uint32_t *id) { unsigned long val; char *endp; val = strtoul(value, &endp, 10); if (*value == '\0' || *endp != '\0') return -EINVAL; if (val >= UINT32_MAX) return -ERANGE; *id = val; return 0; }