Unverified Commit 0eeec93e authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!2563 fix cgroup poll UAF

Merge Pull Request from: @ci-robot 
 
PR sync from: Lu Jialin <lujialin4@huawei.com>
https://mailweb.openeuler.org/hyperkitty/list/kernel@openeuler.org/message/BZRIHTMLEJEBMKCXVMRHWEH36QLEPID6/ 
Arnd Bergmann (1):
  kernfs: add stub helper for kernfs_generic_poll()

Randy Dunlap (1):
  sched/psi: Select KERNFS as needed

Suren Baghdasaryan (1):
  sched/psi: use kernfs polling functions for PSI trigger polling


-- 
2.34.1
 
https://gitee.com/openeuler/kernel/issues/I7DHPO 
 
Link:https://gitee.com/openeuler/kernel/pulls/2563

 

Reviewed-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
Signed-off-by: default avatarJialin Zhang <zhangjialin11@huawei.com>
parents a9ec286c 09abf392
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -510,6 +510,10 @@ static inline int kernfs_setattr(struct kernfs_node *kn,
				 const struct iattr *iattr)
{ return -ENOSYS; }

static inline __poll_t kernfs_generic_poll(struct kernfs_open_file *of,
					   struct poll_table_struct *pt)
{ return -ENOSYS; }

static inline void kernfs_notify(struct kernfs_node *kn) { }

static inline int kernfs_xattr_get(struct kernfs_node *kn, const char *name,
+3 −2
Original line number Diff line number Diff line
@@ -32,8 +32,9 @@ int psi_cgroup_alloc(struct cgroup *cgrp);
void psi_cgroup_free(struct cgroup *cgrp);
void cgroup_move_task(struct task_struct *p, struct css_set *to);

struct psi_trigger *psi_trigger_create(struct psi_group *group,
			char *buf, size_t nbytes, enum psi_res res);
struct psi_trigger *psi_trigger_create(struct psi_group *group, char *buf,
				       size_t nbytes, enum psi_res res,
				       struct kernfs_open_file *of);
void psi_trigger_destroy(struct psi_trigger *t);

__poll_t psi_trigger_poll(void **trigger_ptr, struct file *file,
+3 −0
Original line number Diff line number Diff line
@@ -173,6 +173,9 @@ struct psi_trigger {
	/* Wait queue for polling */
	wait_queue_head_t event_wait;

	/* Kernfs file for cgroup triggers */
	struct kernfs_open_file *of;

	/* Pending event flag */
	int event;

+1 −0
Original line number Diff line number Diff line
@@ -603,6 +603,7 @@ config TASK_IO_ACCOUNTING

config PSI
	bool "Pressure stall information tracking"
	select KERNFS
	help
	  Collect metrics that indicate how overcommitted the CPU, memory,
	  and IO capacity are in the system.
+1 −1
Original line number Diff line number Diff line
@@ -3676,7 +3676,7 @@ static ssize_t cgroup_pressure_write(struct kernfs_open_file *of, char *buf,
	}

	psi = cgroup_ino(cgrp) == 1 ? &psi_system : &cgrp->psi;
	new = psi_trigger_create(psi, buf, nbytes, res);
	new = psi_trigger_create(psi, buf, nbytes, res, of);
	if (IS_ERR(new)) {
		cgroup_put(cgrp);
		return PTR_ERR(new);
Loading