Revert NFTSet feature
This reverts PR #22587 and its follow-up commit. More specifically,
2299b1cae3 (partially),
e176f855278d5098d3fecc5aa24ba702147d42e0,
ceb46a31a01b3d3d1d6095d857e29ea214a2776b, and
51bb9076ab8c050bebb64db5035852385accda35.
The PR was merged without final approval, and has several issues:
- OSS fuzz reported issues in the conf parser,
- It calls synchrnous netlink call, it should not be especially in PID1,
- The importance of NFTSet for CGroup and DynamicUser may be
questionable, at least, there was no justification PID1 should support
it.
- For networkd, it should be implemented with Request object,
- There is no test for the feature.
Fixes #23711.
Fixes #23717.
Fixes #23719.
Fixes #23720.
Fixes #23721.
Fixes #23759.
This commit is contained in:
@@ -4083,43 +4083,6 @@ static int add_shifted_fd(int *fds, size_t fds_size, size_t *n_fds, int fd, int
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void exec_op_dynamic_user_nft_set(bool add, const ExecContext *c, uid_t uid) {
|
||||
int r;
|
||||
|
||||
assert(c);
|
||||
|
||||
for (size_t i = 0; i < c->n_dynamic_user_nft_set_contexts; i++) {
|
||||
NFTSetContext *s = &c->dynamic_user_nft_set_context[i];
|
||||
if (add)
|
||||
r = nft_set_element_add_uint32(s, uid);
|
||||
else
|
||||
r = nft_set_element_del_uint32(s, uid);
|
||||
if (r < 0)
|
||||
log_warning_errno(r, "%s NFT family %s table %s set %s UID " UID_FMT " failed, ignoring: %m",
|
||||
add? "Adding" : "Deleting", nfproto_to_string(s->nfproto), s->table, s->set, uid);
|
||||
}
|
||||
}
|
||||
|
||||
static void exec_add_dynamic_user_nft_set(const ExecContext *c, uid_t uid) {
|
||||
exec_op_dynamic_user_nft_set(true, c, uid);
|
||||
}
|
||||
|
||||
void exec_delete_dynamic_user_nft_set(const ExecContext *c, DynamicUser *d) {
|
||||
int r;
|
||||
uid_t uid;
|
||||
|
||||
if (!d)
|
||||
return;
|
||||
|
||||
r = dynamic_user_current(d, &uid);
|
||||
if (r < 0) {
|
||||
log_warning_errno(r, "Can't get current dynamic user, ignoring: %m");
|
||||
return;
|
||||
}
|
||||
|
||||
exec_op_dynamic_user_nft_set(false, c, uid);
|
||||
}
|
||||
|
||||
static int exec_child(
|
||||
Unit *unit,
|
||||
const ExecCommand *command,
|
||||
@@ -4321,8 +4284,6 @@ static int exec_child(
|
||||
if (dcreds->user)
|
||||
username = dcreds->user->name;
|
||||
|
||||
exec_add_dynamic_user_nft_set(context, uid);
|
||||
|
||||
} else {
|
||||
r = get_fixed_user(context, &username, &uid, &gid, &home, &shell);
|
||||
if (r < 0) {
|
||||
@@ -5385,8 +5346,6 @@ void exec_context_done(ExecContext *c) {
|
||||
c->user = mfree(c->user);
|
||||
c->group = mfree(c->group);
|
||||
|
||||
c->dynamic_user_nft_set_context = nft_set_context_free_many(c->dynamic_user_nft_set_context, &c->n_dynamic_user_nft_set_contexts);
|
||||
|
||||
c->supplementary_groups = strv_free(c->supplementary_groups);
|
||||
|
||||
c->pam_name = mfree(c->pam_name);
|
||||
@@ -6061,11 +6020,6 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) {
|
||||
fprintf(f, "%sGroup: %s\n", prefix, c->group);
|
||||
|
||||
fprintf(f, "%sDynamicUser: %s\n", prefix, yes_no(c->dynamic_user));
|
||||
for (size_t i = 0; i < c->n_dynamic_user_nft_set_contexts; i++)
|
||||
fprintf(f, "%sDynamicUserNFTSet: %s:%s:%s\n", prefix,
|
||||
nfproto_to_string(c->dynamic_user_nft_set_context[i].nfproto),
|
||||
c->dynamic_user_nft_set_context[i].table,
|
||||
c->dynamic_user_nft_set_context[i].set);
|
||||
|
||||
strv_dump(f, prefix, "SupplementaryGroups", c->supplementary_groups);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user