git: 9front

Download patch

ref: 7c9fe270231e6061ea98c63c6de9756b6d03e1ba
parent: 22b12c38ac0bb4bf0aca0b7cc056f15f2955cc24
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Fri May 31 16:50:41 EDT 2024

hjfs: check mount spec (aname) in Tauth

Filesystems should ensure that the mount
spec (aname) is valid before handing out
an auth fid.

This avoids pointless authenticaiton
protocols being run just for the
mount later to fail.

This happens with our current /lib/namespace
file for the opportunistic line:

mount /srv/boot /n/other other

--- a/sys/src/cmd/hjfs/9p.c
+++ b/sys/src/cmd/hjfs/9p.c
@@ -13,8 +13,10 @@
 {
 	if((fsmain->flags & FSNOAUTH) != 0)
 		respond(req, "no authentication required");
-	else
+	else if(*req->ifcall.aname == 0 || strcmp(req->ifcall.aname, "dump") == 0)
 		auth9p(req);
+	else
+		respond(req, Ebadspec);
 }
 
 static void
@@ -30,12 +32,12 @@
 		respond(req, "no such user");
 		return;
 	}
-	if(req->ifcall.aname == nil || *req->ifcall.aname == 0)
+	if(*req->ifcall.aname == 0)
 		flags = 0;
 	else if(strcmp(req->ifcall.aname, "dump") == 0)
 		flags = CHFDUMP|CHFRO;
 	else{
-		respond(req, Einval);
+		respond(req, Ebadspec);
 		return;
 	}
 	ch = chanattach(fsmain, flags);
--- a/sys/src/cmd/hjfs/dat.h
+++ b/sys/src/cmd/hjfs/dat.h
@@ -231,6 +231,7 @@
 extern char Eperm[];
 extern char Eexists[];
 extern char Elocked[];
+extern char Ebadspec[];
 
 enum { /* getblk modes */
 	GBREAD = 0,
--- a/sys/src/cmd/hjfs/main.c
+++ b/sys/src/cmd/hjfs/main.c
@@ -12,6 +12,7 @@
 char Eperm[] = "permission denied";
 char Eexists[] = "file exists";
 char Elocked[] = "file locked";
+char Ebadspec[] = "bad attach specifier";
 
 int mainstacksize = 65536;
 
--