All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] add setutsname to reuse code in setdomainname and sethostname
@ 2026-11-01  7:12 Laurijssen
  2026-11-01 15:38 ` Bradley Morgan
  0 siblings, 1 reply; 10+ messages in thread
From: Laurijssen @ 2026-11-01  7:12 UTC (permalink / raw)
  To: linux-kernel, pjw, akpm, jannh, brauner; +Cc: Laurijssen

- sethostname and setdomainname duplicated code with one field difference.
- added setutsname with arguments domainname/hostname to reuse the same code.

Signed-off-by: Laurijssen <laurijssen@protonmail.com>
---
 kernel/sys.c | 46 ++++++++++++++++++----------------------------
 1 file changed, 18 insertions(+), 28 deletions(-)

diff --git a/kernel/sys.c b/kernel/sys.c
index 755bfa5ccd92..3a4e483c22d5 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -1419,7 +1419,9 @@ SYSCALL_DEFINE1(olduname, struct oldold_utsname __user *, name)
 }
 #endif
 
-SYSCALL_DEFINE2(sethostname, char __user *, name, int, len)
+static int setutsname(char __user *name, int len, enum uts_proc uts_proc,
+		      char (*field)[__NEW_UTS_LEN + 1],
+		      int fieldlen)
 {
 	int errno;
 	char tmp[__NEW_UTS_LEN];
@@ -1431,20 +1433,26 @@ SYSCALL_DEFINE2(sethostname, char __user *, name, int, len)
 		return -EINVAL;
 	errno = -EFAULT;
 	if (!copy_from_user(tmp, name, len)) {
-		struct new_utsname *u;
-
 		add_device_randomness(tmp, len);
 		down_write(&uts_sem);
-		u = utsname();
-		memcpy(u->nodename, tmp, len);
-		memset(u->nodename + len, 0, sizeof(u->nodename) - len);
+		memcpy(*field, tmp, len);
+		memset(*field + len, 0, fieldlen - len);
+
 		errno = 0;
-		uts_proc_notify(UTS_PROC_HOSTNAME);
+		uts_proc_notify(uts_proc);
 		up_write(&uts_sem);
 	}
 	return errno;
 }
 
+SYSCALL_DEFINE2(sethostname, char __user *, name, int, len)
+{
+	// utsname() always returns a valid pointer to the current utsname structure.
+	struct new_utsname *u = utsname();
+
+	return setutsname(name, len, UTS_PROC_HOSTNAME, &u->nodename, sizeof(u->nodename));
+}
+
 #ifdef __ARCH_WANT_SYS_GETHOSTNAME
 
 SYSCALL_DEFINE2(gethostname, char __user *, name, int, len)
@@ -1475,28 +1483,10 @@ SYSCALL_DEFINE2(gethostname, char __user *, name, int, len)
  */
 SYSCALL_DEFINE2(setdomainname, char __user *, name, int, len)
 {
-	int errno;
-	char tmp[__NEW_UTS_LEN];
-
-	if (!ns_capable(current->nsproxy->uts_ns->user_ns, CAP_SYS_ADMIN))
-		return -EPERM;
-	if (len < 0 || len > __NEW_UTS_LEN)
-		return -EINVAL;
-
-	errno = -EFAULT;
-	if (!copy_from_user(tmp, name, len)) {
-		struct new_utsname *u;
+	// utsname() always returns a valid pointer to the current utsname structure.
+	struct new_utsname *u = utsname();
 
-		add_device_randomness(tmp, len);
-		down_write(&uts_sem);
-		u = utsname();
-		memcpy(u->domainname, tmp, len);
-		memset(u->domainname + len, 0, sizeof(u->domainname) - len);
-		errno = 0;
-		uts_proc_notify(UTS_PROC_DOMAINNAME);
-		up_write(&uts_sem);
-	}
-	return errno;
+	return setutsname(name, len, UTS_PROC_DOMAINNAME, &u->domainname, sizeof(u->domainname));
 }
 
 /* make sure you are allowed to change @tsk limits before calling this */
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2026-11-12  8:11 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-01  7:12 [PATCH] add setutsname to reuse code in setdomainname and sethostname Laurijssen
2026-11-01 15:38 ` Bradley Morgan
2026-11-09 11:44   ` [PATCH] SYS: add utsname_set_field " Laurijssen
2026-11-09 20:30     ` kernel test robot
2026-11-09 21:11     ` Bradley Morgan
2026-11-11  6:20       ` Laurijssen
2026-11-09 21:13     ` kernel test robot
2026-11-11  7:33     ` [PATCH] " Laurijssen
2026-11-11 20:17       ` Bradley Morgan
2026-11-12  8:11         ` [PATCH] SYS: refactor sethostname setdomainname by introducing shared helper Laurijssen

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.