Skip to content

Commit 54fa082

Browse files
laoarKernel Patches Daemon
authored andcommitted
mm, security: Add lsm hook for set_mempolicy_home_node(2)
In container environment, we don't want users to bind their memory to a specific numa node, while we want to unit control memory resource with kubelet. Therefore, add a new lsm hook for set_mempolicy_home_node(2), then we can enforce fine-grained control over memory policy adjustment by the tasks in a container. Signed-off-by: Yafang Shao <laoar.shao@gmail.com>
1 parent 859507b commit 54fa082

File tree

4 files changed

+22
-0
lines changed

4 files changed

+22
-0
lines changed

include/linux/lsm_hook_defs.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,3 +425,5 @@ LSM_HOOK(int, 0, mbind, unsigned long start, unsigned long len,
425425
unsigned long maxnode, unsigned int flags)
426426
LSM_HOOK(int, 0, set_mempolicy, int mode, const unsigned long __user *nmask,
427427
unsigned long maxnode)
428+
LSM_HOOK(int, 0, set_mempolicy_home_node, unsigned long start, unsigned long len,
429+
unsigned long home_node, unsigned long flags)

include/linux/security.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -489,6 +489,8 @@ int security_mbind(unsigned long start, unsigned long len,
489489
unsigned long maxnode, unsigned int flags);
490490
int security_set_mempolicy(int mode, const unsigned long __user *nmask,
491491
unsigned long maxnode);
492+
int security_set_mempolicy_home_node(unsigned long start, unsigned long len,
493+
unsigned long home_node, unsigned long flags);
492494
#else /* CONFIG_SECURITY */
493495

494496
static inline int call_blocking_lsm_notifier(enum lsm_event event, void *data)
@@ -1413,6 +1415,12 @@ static inline int security_set_mempolicy(int mode, const unsigned long __user *n
14131415
{
14141416
return 0;
14151417
}
1418+
1419+
static inline int security_set_mempolicy_home_node(unsigned long start, unsigned long len,
1420+
unsigned long home_node, unsigned long flags)
1421+
{
1422+
return 0;
1423+
}
14161424
#endif /* CONFIG_SECURITY */
14171425

14181426
#if defined(CONFIG_SECURITY) && defined(CONFIG_WATCH_QUEUE)

mm/mempolicy.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1523,6 +1523,11 @@ SYSCALL_DEFINE4(set_mempolicy_home_node, unsigned long, start, unsigned long, le
15231523
return -EINVAL;
15241524
if (end == start)
15251525
return 0;
1526+
1527+
err = security_set_mempolicy_home_node(start, len, home_node, flags);
1528+
if (err)
1529+
return err;
1530+
15261531
mmap_write_lock(mm);
15271532
prev = vma_prev(&vmi);
15281533
for_each_vma_range(vmi, vma, end) {

security/security.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5349,3 +5349,10 @@ int security_set_mempolicy(int mode, const unsigned long __user *nmask, unsigned
53495349
{
53505350
return call_int_hook(set_mempolicy, 0, mode, nmask, maxnode);
53515351
}
5352+
5353+
int security_set_mempolicy_home_node(unsigned long start, unsigned long len,
5354+
unsigned long home_node, unsigned long flags)
5355+
{
5356+
5357+
return call_int_hook(set_mempolicy_home_node, 0, start, len, home_node, flags);
5358+
}

0 commit comments

Comments
 (0)