mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
liveupdate: add LIVEUPDATE_SESSION_GET_NAME ioctl
Userspace when requesting a session via the ioctl specifies a name and gets a FD, but then there is no ioctl to go back the other way and get the name given a LUO session FD. This is problematic especially when there is a userspace orchestrator that wants to check what FDs it is handling for clients without having to do manual string scraping of procfs, or without procfs at all. Add a ioctl to simply get the name from an FD. Signed-off-by: Luca Boccassi <luca.boccassi@gmail.com> Reviewed-by: Pasha Tatashin <pasha.tatashin@soleen.com> Reviewed-by: Pratyush Yadav <pratyush@kernel.org> Link: https://lore.kernel.org/r/20260429212221.814107-4-luca.boccassi@gmail.com Signed-off-by: Pasha Tatashin <pasha.tatashin@soleen.com> Signed-off-by: Mike Rapoport (Microsoft) <rppt@kernel.org>
This commit is contained in:
parent
dab2b4c66a
commit
4c08a9f38c
|
|
@ -59,6 +59,7 @@ enum {
|
|||
LIVEUPDATE_CMD_SESSION_PRESERVE_FD = LIVEUPDATE_CMD_SESSION_BASE,
|
||||
LIVEUPDATE_CMD_SESSION_RETRIEVE_FD = 0x41,
|
||||
LIVEUPDATE_CMD_SESSION_FINISH = 0x42,
|
||||
LIVEUPDATE_CMD_SESSION_GET_NAME = 0x43,
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -213,4 +214,24 @@ struct liveupdate_session_finish {
|
|||
#define LIVEUPDATE_SESSION_FINISH \
|
||||
_IO(LIVEUPDATE_IOCTL_TYPE, LIVEUPDATE_CMD_SESSION_FINISH)
|
||||
|
||||
/**
|
||||
* struct liveupdate_session_get_name - ioctl(LIVEUPDATE_SESSION_GET_NAME)
|
||||
* @size: Input; sizeof(struct liveupdate_session_get_name)
|
||||
* @reserved: Input; Must be zero. Reserved for future use.
|
||||
* @name: Output; A null-terminated string with the full session name.
|
||||
*
|
||||
* Retrieves the full name of the session associated with this file descriptor.
|
||||
* This is useful because the kernel may truncate the name shown in /proc.
|
||||
*
|
||||
* Return: 0 on success, negative error code on failure.
|
||||
*/
|
||||
struct liveupdate_session_get_name {
|
||||
__u32 size;
|
||||
__u32 reserved;
|
||||
__u8 name[LIVEUPDATE_SESSION_NAME_LENGTH];
|
||||
};
|
||||
|
||||
#define LIVEUPDATE_SESSION_GET_NAME \
|
||||
_IO(LIVEUPDATE_IOCTL_TYPE, LIVEUPDATE_CMD_SESSION_GET_NAME)
|
||||
|
||||
#endif /* _UAPI_LIVEUPDATE_H */
|
||||
|
|
|
|||
|
|
@ -289,10 +289,24 @@ static int luo_session_finish(struct luo_session *session,
|
|||
return luo_ucmd_respond(ucmd, sizeof(*argp));
|
||||
}
|
||||
|
||||
static int luo_session_get_name(struct luo_session *session,
|
||||
struct luo_ucmd *ucmd)
|
||||
{
|
||||
struct liveupdate_session_get_name *argp = ucmd->cmd;
|
||||
|
||||
if (argp->reserved != 0)
|
||||
return -EINVAL;
|
||||
|
||||
strscpy((char *)argp->name, session->name, sizeof(argp->name));
|
||||
|
||||
return luo_ucmd_respond(ucmd, sizeof(*argp));
|
||||
}
|
||||
|
||||
union ucmd_buffer {
|
||||
struct liveupdate_session_finish finish;
|
||||
struct liveupdate_session_preserve_fd preserve;
|
||||
struct liveupdate_session_retrieve_fd retrieve;
|
||||
struct liveupdate_session_get_name get_name;
|
||||
};
|
||||
|
||||
struct luo_ioctl_op {
|
||||
|
|
@ -319,6 +333,8 @@ static const struct luo_ioctl_op luo_session_ioctl_ops[] = {
|
|||
struct liveupdate_session_preserve_fd, token),
|
||||
IOCTL_OP(LIVEUPDATE_SESSION_RETRIEVE_FD, luo_session_retrieve_fd,
|
||||
struct liveupdate_session_retrieve_fd, token),
|
||||
IOCTL_OP(LIVEUPDATE_SESSION_GET_NAME, luo_session_get_name,
|
||||
struct liveupdate_session_get_name, name),
|
||||
};
|
||||
|
||||
static long luo_session_ioctl(struct file *filep, unsigned int cmd,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user