All of lore.kernel.org
 help / color / mirror / Atom feed
From: Richard Palethorpe <rpalethorpe@suse.de>
To: "xuyang2018.jy@fujitsu.com" <xuyang2018.jy@fujitsu.com>
Cc: "ltp@lists.linux.it" <ltp@lists.linux.it>
Subject: Re: [LTP] [PATCH v1 2/3] tst_cgroup: Add safe_cg_open and safe_cg_fchown functions
Date: Tue, 16 Aug 2022 09:18:32 +0100	[thread overview]
Message-ID: <87fshwlh5t.fsf@suse.de> (raw)
In-Reply-To: <031f32b2-70fd-8b6d-e2ec-f1d3d1bdcaa5@fujitsu.com>

Hello,

"xuyang2018.jy@fujitsu.com" <xuyang2018.jy@fujitsu.com> writes:

> Hi Richard
>> Hello,
>> 
>> Yang Xu <xuyang2018.jy@fujitsu.com> writes:
>> 
>>> safe_cg_open is used to open the sub control's file ie cgroup.procs
>>> and returns the fd.
>>>
>>> safe_cg_fchown is used to use fchownat to change file's uid and gid.
>>>
>>> Signed-off-by: Yang Xu <xuyang2018.jy@fujitsu.com>
>>> ---
>>>   include/tst_cgroup.h | 15 +++++++++++++++
>>>   lib/tst_cgroup.c     | 39 +++++++++++++++++++++++++++++++++++++++
>>>   2 files changed, 54 insertions(+)
>>>
>>> diff --git a/include/tst_cgroup.h b/include/tst_cgroup.h
>>> index d06847cc6..292c9baa4 100644
>>> --- a/include/tst_cgroup.h
>>> +++ b/include/tst_cgroup.h
>>> @@ -188,6 +188,21 @@ ssize_t safe_cg_read(const char *const file, const int lineno,
>>>   			 char *const out, const size_t len)
>>>   			 __attribute__ ((nonnull));
>>>   
>>> +#define SAFE_CG_OPEN(cg, file_name, flags)			\
>>> +	safe_cg_open(__FILE__, __LINE__, (cg), (file_name), (flags))
>>> +
>>> +int safe_cg_open(const char *const file, const int lineno,
>>> +		 const struct tst_cg_group *const cg,
>>> +		 const char *const file_name, int flags);
>>> +
>>> +#define SAFE_CG_FCHOWN(cg, file_name, owner, group)		\
>>> +	safe_cg_fchown(__FILE__, __LINE__,			\
>>> +			   (cg), (file_name), (owner), (group))
>>> +
>>> +void safe_cg_fchown(const char *const file, const int lineno,
>>> +		    const struct tst_cg_group *const cg,
>>> +		    const char *const file_name, uid_t owner, gid_t group);
>>> +
>>>   #define SAFE_CG_PRINTF(cg, file_name, fmt, ...)			\
>>>   	safe_cg_printf(__FILE__, __LINE__,				\
>>>   			   (cg), (file_name), (fmt), __VA_ARGS__)
>>> diff --git a/lib/tst_cgroup.c b/lib/tst_cgroup.c
>>> index 1cfd79243..dedc0f65b 100644
>>> --- a/lib/tst_cgroup.c
>>> +++ b/lib/tst_cgroup.c
>>> @@ -1297,6 +1297,45 @@ ssize_t safe_cg_read(const char *const file, const int lineno,
>>>   	return read_ret;
>>>   }
>>>   
>>> +int safe_cg_open(const char *const file, const int lineno,
>>> +			const struct tst_cg_group *cg,
>>> +			const char *const file_name, int flags)
>>> +{
>>> +	const struct cgroup_file *const cfile =
>>> +		cgroup_file_find(file, lineno, file_name);
>>> +	struct cgroup_dir *const *dir;
>>> +	const char *alias;
>>> +	int fd;
>>> +
>>> +	for_each_dir(cg, cfile->ctrl_indx, dir) {
>>> +		alias = cgroup_file_alias(cfile, *dir);
>>> +		if (!alias)
>>> +			continue;
>>> +
>>> +		fd = safe_openat(file, lineno, (*dir)->dir_fd, alias,
>>> flags);
>> 
>> This will only return the last fd that gets opened. That's OK if the
>> file only exists on a single V1 controller, but if it exists on multiple
>> controllers (e.g. any cgroup.* file) then we will open multiple files
>> and only return the fd for the last of them.
>
> Sorry for the late reply. I just copy these code from safe_cg_printf.
> So safe_cg_printf have the same situation that write value to muliple 
> files under the created cgroup directory.
>
> So what should we do? Add a fd arrat member in  cgroup_file  struct?

I'm not sure what you mean, but I can see a few options.

1. Pass a pointer to a function which takes the fd, for e.g.

safe_cg_open(..., void (*const on_open)(int fd))
{
        ...
        for_each_dir(...) {
            ...
            fd = safe_openat(...);
            on_open(fd);
            close(fd);
        }
        ...
}

2. Allocate and return an array of open fd's
3. Pass an array as large as the maximum number controllers which is
   populated with open fd's.

Which option to pick I think depends on what results in the simplest
test code.

>
> Best Regards
> Yang Xu
>
>> 


-- 
Thank you,
Richard.

-- 
Mailing list info: https://lists.linux.it/listinfo/ltp

  reply	other threads:[~2022-08-16  8:35 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-03 10:19 [LTP] [PATCH v1 1/3] tst_safe_file_at: Add SAFE_FCHOWNAT macro Yang Xu
2022-08-03 10:19 ` [LTP] [PATCH v1 2/3] tst_cgroup: Add safe_cg_open and safe_cg_fchown functions Yang Xu
2022-08-04 10:24   ` Richard Palethorpe
2022-08-16  6:19     ` xuyang2018.jy
2022-08-16  8:18       ` Richard Palethorpe [this message]
2022-08-18  8:05         ` xuyang2018.jy
2022-08-18  9:03           ` Richard Palethorpe
2022-08-23  7:10             ` xuyang2018.jy
2022-08-23  9:55               ` xuyang2018.jy
2022-08-18  9:00         ` [LTP] [RFC v2 1/3] tst_safe_file_at: Add SAFE_FCHOWNAT macro Yang Xu
2022-08-18  9:00           ` [LTP] [RFC v2 2/3] tst_cgroup: Add safe_cg_open and safe_cg_fchown functions Yang Xu
2022-08-18  9:00           ` [LTP] [RFC v2 3/3] memcontrol05: copy from kernel selftest test_cgcore_lesser_euid_open Yang Xu
2022-08-23 11:01             ` [LTP] [PATCH v3 1/3] tst_safe_file_at: Add SAFE_FCHOWNAT macro Yang Xu
2022-08-23 11:01               ` [LTP] [PATCH v3 2/3] tst_cgroup: Add safe_cg_open and safe_cg_fchown functions Yang Xu
2022-08-25 14:57                 ` Richard Palethorpe
2022-08-25 16:08                   ` Richard Palethorpe
2022-08-26  2:04                     ` xuyang2018.jy
2022-08-26  3:59                     ` [LTP] [PATCH v4 1/3] tst_safe_file_at: Add SAFE_FCHOWNAT macro Yang Xu
2022-08-26  3:59                       ` [LTP] [PATCH v4 2/3] tst_cgroup: Add safe_cg_open and safe_cg_fchown functions Yang Xu
2022-08-26  5:54                         ` Richard Palethorpe
2022-08-26  6:33                           ` xuyang2018.jy
2022-08-26  3:59                       ` [LTP] [PATCH v4 3/3] cgroup_core01: copy from kernel selftest test_cgcore_lesser_euid_open Yang Xu
2022-08-23 11:01               ` [LTP] [PATCH v3 3/3] core01: " Yang Xu
2022-08-03 10:19 ` [LTP] [PATCH v1 3/3] memcontrol05: " Yang Xu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87fshwlh5t.fsf@suse.de \
    --to=rpalethorpe@suse.de \
    --cc=ltp@lists.linux.it \
    --cc=xuyang2018.jy@fujitsu.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.