On Thu, Jun 25, 2020 at 05:29:29PM +0100, Dr. David Alan Gilbert (git) wrote: > + /* > + * The modcaps option is a colon separated list of caps, > + * each preceded by either + or -. > + */ > + while (lo->modcaps) { > + capng_act_t action; > + int cap; > + > + char *next = strchr(lo->modcaps, ':'); > + if (next) { > + *next = '\0'; > + next++; > + } > + > + switch (lo->modcaps[0]) { > + case '+': > + action = CAPNG_ADD; > + break; > + > + case '-': > + action = CAPNG_DROP; > + break; > + > + default: > + fuse_log(FUSE_LOG_ERR, > + "%s: Expecting '+'/'-' in modcaps but found '%c'\n", > + __func__, lo->modcaps[0]); > + exit(1); > + } > + cap = capng_name_to_capability(lo->modcaps + 1); > + if (cap < 0) { > + fuse_log(FUSE_LOG_ERR, "%s: Unknown capability '%s'\n", __func__, > + lo->modcaps); > + exit(1); > + } > + if (capng_update(action, CAPNG_PERMITTED | CAPNG_EFFECTIVE, cap)) { > + fuse_log(FUSE_LOG_ERR, "%s: capng_update failed for '%s'\n", > + __func__, lo->modcaps); > + exit(1); > + } > + > + lo->modcaps = next;
How about passing char *modcaps into this function so that lo->modcaps isn't modified by the parsing loop? That seems a bit cleaner and if we ever decide to free lo->modcaps it will work as expected. Stefan
signature.asc
Description: PGP signature