* [PATCH 1/2] tomoyo: use vsnprintf() properly
@ 2022-08-20 20:25 Al Viro
2022-08-20 20:26 ` [PATCH 2/2] tomoyo: struct path it might get from LSM callers won't have NULL dentry or mnt Al Viro
2022-08-21 3:39 ` [PATCH 1/2] tomoyo: use vsnprintf() properly Tetsuo Handa
0 siblings, 2 replies; 4+ messages in thread
From: Al Viro @ 2022-08-20 20:25 UTC (permalink / raw)
To: Tetsuo Handa; +Cc: linux-kernel
Idiomatic way to find how much space sprintf output would take is
len = snprintf(NULL, 0, ...) + 1;
Once upon a time there'd been libc implementations that blew chunks
on that and somebody had come up with the following "cute" trick:
len = snprintf((char *) &len, 1, ...) + 1;
for doing the same. However, that's unidiomatic, harder to follow
*and* any such libc implementation would violate both C99 and POSIX
(since 2001).
IOW, this kludge is best buried along with such libc implementations,
nevermind getting cargo-culted into newer code. Our vsnprintf() does not
suffer that braindamage, TYVM.
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
security/tomoyo/audit.c | 2 +-
security/tomoyo/common.c | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/security/tomoyo/audit.c b/security/tomoyo/audit.c
index 023bedd9dfa3..7cf8fdbb29bf 100644
--- a/security/tomoyo/audit.c
+++ b/security/tomoyo/audit.c
@@ -423,7 +423,7 @@ void tomoyo_write_log(struct tomoyo_request_info *r, const char *fmt, ...)
int len;
va_start(args, fmt);
- len = vsnprintf((char *) &len, 1, fmt, args) + 1;
+ len = vsnprintf(NULL, 0, fmt, args) + 1;
va_end(args);
va_start(args, fmt);
tomoyo_write_log2(r, len, fmt, args);
diff --git a/security/tomoyo/common.c b/security/tomoyo/common.c
index ff17abc96e5c..f4cd9b58b205 100644
--- a/security/tomoyo/common.c
+++ b/security/tomoyo/common.c
@@ -2057,7 +2057,7 @@ int tomoyo_supervisor(struct tomoyo_request_info *r, const char *fmt, ...)
bool quota_exceeded = false;
va_start(args, fmt);
- len = vsnprintf((char *) &len, 1, fmt, args) + 1;
+ len = vsnprintf(NULL, 0, fmt, args) + 1;
va_end(args);
/* Write /sys/kernel/security/tomoyo/audit. */
va_start(args, fmt);
--
2.30.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] tomoyo: struct path it might get from LSM callers won't have NULL dentry or mnt
2022-08-20 20:25 [PATCH 1/2] tomoyo: use vsnprintf() properly Al Viro
@ 2022-08-20 20:26 ` Al Viro
2022-08-21 3:40 ` Tetsuo Handa
2022-08-21 3:39 ` [PATCH 1/2] tomoyo: use vsnprintf() properly Tetsuo Handa
1 sibling, 1 reply; 4+ messages in thread
From: Al Viro @ 2022-08-20 20:26 UTC (permalink / raw)
To: Tetsuo Handa; +Cc: linux-fsdevel, linux-security-module
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
---
security/tomoyo/file.c | 2 +-
security/tomoyo/realpath.c | 9 ++-------
2 files changed, 3 insertions(+), 8 deletions(-)
diff --git a/security/tomoyo/file.c b/security/tomoyo/file.c
index 1e6077568fde..8f3b90b6e03d 100644
--- a/security/tomoyo/file.c
+++ b/security/tomoyo/file.c
@@ -717,7 +717,7 @@ int tomoyo_path_number_perm(const u8 type, const struct path *path,
int idx;
if (tomoyo_init_request_info(&r, NULL, tomoyo_pn2mac[type])
- == TOMOYO_CONFIG_DISABLED || !path->dentry)
+ == TOMOYO_CONFIG_DISABLED)
return 0;
idx = tomoyo_read_lock();
if (!tomoyo_get_realpath(&buf, path))
diff --git a/security/tomoyo/realpath.c b/security/tomoyo/realpath.c
index df4798980416..1c483ee7f93d 100644
--- a/security/tomoyo/realpath.c
+++ b/security/tomoyo/realpath.c
@@ -240,11 +240,8 @@ char *tomoyo_realpath_from_path(const struct path *path)
char *name = NULL;
unsigned int buf_len = PAGE_SIZE / 2;
struct dentry *dentry = path->dentry;
- struct super_block *sb;
+ struct super_block *sb = dentry->d_sb;
- if (!dentry)
- return NULL;
- sb = dentry->d_sb;
while (1) {
char *pos;
struct inode *inode;
@@ -264,10 +261,8 @@ char *tomoyo_realpath_from_path(const struct path *path)
inode = d_backing_inode(sb->s_root);
/*
* Get local name for filesystems without rename() operation
- * or dentry without vfsmount.
*/
- if (!path->mnt ||
- (!inode->i_op->rename &&
+ if ((!inode->i_op->rename &&
!(sb->s_type->fs_flags & FS_REQUIRES_DEV)))
pos = tomoyo_get_local_path(path->dentry, buf,
buf_len - 1);
--
2.30.2
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH 1/2] tomoyo: use vsnprintf() properly
2022-08-20 20:25 [PATCH 1/2] tomoyo: use vsnprintf() properly Al Viro
2022-08-20 20:26 ` [PATCH 2/2] tomoyo: struct path it might get from LSM callers won't have NULL dentry or mnt Al Viro
@ 2022-08-21 3:39 ` Tetsuo Handa
1 sibling, 0 replies; 4+ messages in thread
From: Tetsuo Handa @ 2022-08-21 3:39 UTC (permalink / raw)
To: Al Viro; +Cc: linux-kernel
On 2022/08/21 5:25, Al Viro wrote:
> Idiomatic way to find how much space sprintf output would take is
> len = snprintf(NULL, 0, ...) + 1;
> Once upon a time there'd been libc implementations that blew chunks
> on that and somebody had come up with the following "cute" trick:
> len = snprintf((char *) &len, 1, ...) + 1;
> for doing the same. However, that's unidiomatic, harder to follow
> *and* any such libc implementation would violate both C99 and POSIX
> (since 2001).
> IOW, this kludge is best buried along with such libc implementations,
> nevermind getting cargo-culted into newer code. Our vsnprintf() does not
> suffer that braindamage, TYVM.
>
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Thank you. You can send this change via your tree if you like.
Acked-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2022-08-21 3:40 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-08-20 20:25 [PATCH 1/2] tomoyo: use vsnprintf() properly Al Viro
2022-08-20 20:26 ` [PATCH 2/2] tomoyo: struct path it might get from LSM callers won't have NULL dentry or mnt Al Viro
2022-08-21 3:40 ` Tetsuo Handa
2022-08-21 3:39 ` [PATCH 1/2] tomoyo: use vsnprintf() properly Tetsuo Handa
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.