cap_fileargs: Fix a descriptor leak in the service process.
The service handler for fileargs_open() tries to pre-open multiple files and pass descriptors for each back to the sandboxed process in a single message. This is to amortize the cost of round-trips between the two processes. The service process adds a "cache" nvlist to the reply to "open", containing file descriptors for pre-opened files. However, when adding that nvlist to the reply, it was making a copy, effectively leaking the cached descriptors. While here, fix spelling in a local variable name. PR: 241226 Reviewed by: oshogbo MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D25095
This commit is contained in:
parent
b7ec5dea64
commit
c78e42e207
@ -500,7 +500,7 @@ open_file(const char *name)
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
fileargs_add_cache(nvlist_t *nvlout, const nvlist_t *limits,
|
fileargs_add_cache(nvlist_t *nvlout, const nvlist_t *limits,
|
||||||
const char *curent_name)
|
const char *current_name)
|
||||||
{
|
{
|
||||||
int type, i, fd;
|
int type, i, fd;
|
||||||
void *cookie;
|
void *cookie;
|
||||||
@ -527,9 +527,9 @@ fileargs_add_cache(nvlist_t *nvlout, const nvlist_t *limits,
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type != NV_TYPE_NULL ||
|
if (type != NV_TYPE_NULL || (current_name != NULL &&
|
||||||
(curent_name != NULL && strcmp(fname, curent_name) == 0)) {
|
strcmp(fname, current_name) == 0)) {
|
||||||
curent_name = NULL;
|
current_name = NULL;
|
||||||
i--;
|
i--;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -553,7 +553,7 @@ fileargs_add_cache(nvlist_t *nvlout, const nvlist_t *limits,
|
|||||||
nvlist_add_binary(new, "stat", &sb, sizeof(sb));
|
nvlist_add_binary(new, "stat", &sb, sizeof(sb));
|
||||||
}
|
}
|
||||||
|
|
||||||
nvlist_add_nvlist(nvlout, fname, new);
|
nvlist_move_nvlist(nvlout, fname, new);
|
||||||
}
|
}
|
||||||
cacheposition = cookie;
|
cacheposition = cookie;
|
||||||
lastname = fname;
|
lastname = fname;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user