Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Jan 2015 10:34:03 +0000 (UTC)
From:      Dmitry Chagin <dchagin@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r276654 - in head/sys: compat/freebsd32 compat/linux kern sys
Message-ID:  <201501041034.t04AY3nc048613@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: dchagin
Date: Sun Jan  4 10:34:02 2015
New Revision: 276654
URL: https://svnweb.freebsd.org/changeset/base/276654

Log:
  Indeed, instead of hiding the kern___getcwd() bug by bogus cast
  in r276564, change path type to char * (pathnames are always char *).
  And remove bogus casts of malloc().
  kern___getcwd() internally doesn't actually use or support u_char *
  paths, except to copy them to a normal char * path.
  
  These changes are not visible to libc as libc/gen/getcwd.c misdeclares
  __getcwd() as taking a plain char * path.
  
  While here remove _SYS_SYSPROTO_H_ for __getcwd() syscall as
  we always have sysproto.h.
  
  Pointed out by:	bde
  
  MFC after:	1 week

Modified:
  head/sys/compat/freebsd32/syscalls.master
  head/sys/compat/linux/linux_getcwd.c
  head/sys/kern/syscalls.master
  head/sys/kern/vfs_cache.c
  head/sys/sys/syscallsubr.h

Modified: head/sys/compat/freebsd32/syscalls.master
==============================================================================
--- head/sys/compat/freebsd32/syscalls.master	Sun Jan  4 05:40:41 2015	(r276653)
+++ head/sys/compat/freebsd32/syscalls.master	Sun Jan  4 10:34:02 2015	(r276654)
@@ -583,7 +583,7 @@
 323	AUE_NULL	OBSOL	thr_wakeup
 324	AUE_MLOCKALL	NOPROTO	{ int mlockall(int how); }
 325	AUE_MUNLOCKALL	NOPROTO	{ int munlockall(void); }
-326	AUE_GETCWD	NOPROTO	{ int __getcwd(u_char *buf, u_int buflen); }
+326	AUE_GETCWD	NOPROTO	{ int __getcwd(char *buf, u_int buflen); }
 
 327	AUE_NULL	NOPROTO	{ int sched_setparam (pid_t pid, \
 				    const struct sched_param *param); }

Modified: head/sys/compat/linux/linux_getcwd.c
==============================================================================
--- head/sys/compat/linux/linux_getcwd.c	Sun Jan  4 05:40:41 2015	(r276653)
+++ head/sys/compat/linux/linux_getcwd.c	Sun Jan  4 10:34:02 2015	(r276654)
@@ -186,7 +186,7 @@ linux_getcwd_scandir(lvpp, uvpp, bpp, bu
 	dirbuflen = DIRBLKSIZ;
 	if (dirbuflen < va.va_blocksize)
 		dirbuflen = va.va_blocksize;
-	dirbuf = (char *)malloc(dirbuflen, M_TEMP, M_WAITOK);
+	dirbuf = malloc(dirbuflen, M_TEMP, M_WAITOK);
 
 #if 0
 unionread:
@@ -413,7 +413,7 @@ out:
 int
 linux_getcwd(struct thread *td, struct linux_getcwd_args *args)
 {
-	caddr_t bp, bend, path;
+	char *bp, *bend, *path;
 	int error, len, lenused;
 
 #ifdef DEBUG
@@ -428,9 +428,9 @@ linux_getcwd(struct thread *td, struct l
 	else if (len < 2)
 		return ERANGE;
 
-	path = (char *)malloc(len, M_TEMP, M_WAITOK);
+	path = malloc(len, M_TEMP, M_WAITOK);
 
-	error = kern___getcwd(td, (u_char *)path, UIO_SYSSPACE, len);
+	error = kern___getcwd(td, path, UIO_SYSSPACE, len);
 	if (!error) {
 		lenused = strlen(path) + 1;
 		if (lenused <= args->bufsize) {

Modified: head/sys/kern/syscalls.master
==============================================================================
--- head/sys/kern/syscalls.master	Sun Jan  4 05:40:41 2015	(r276653)
+++ head/sys/kern/syscalls.master	Sun Jan  4 10:34:02 2015	(r276654)
@@ -571,7 +571,7 @@
 323	AUE_NULL	OBSOL	thr_wakeup
 324	AUE_MLOCKALL	STD	{ int mlockall(int how); }
 325	AUE_MUNLOCKALL	STD	{ int munlockall(void); }
-326	AUE_GETCWD	STD	{ int __getcwd(u_char *buf, u_int buflen); }
+326	AUE_GETCWD	STD	{ int __getcwd(char *buf, u_int buflen); }
 
 327	AUE_NULL	STD	{ int sched_setparam (pid_t pid, \
 				    const struct sched_param *param); }

Modified: head/sys/kern/vfs_cache.c
==============================================================================
--- head/sys/kern/vfs_cache.c	Sun Jan  4 05:40:41 2015	(r276653)
+++ head/sys/kern/vfs_cache.c	Sun Jan  4 10:34:02 2015	(r276654)
@@ -1043,14 +1043,6 @@ vfs_cache_lookup(ap)
 	return (error);
 }
 
-
-#ifndef _SYS_SYSPROTO_H_
-struct  __getcwd_args {
-	u_char	*buf;
-	u_int	buflen;
-};
-#endif
-
 /*
  * XXX All of these sysctls would probably be more productive dead.
  */
@@ -1069,7 +1061,7 @@ sys___getcwd(td, uap)
 }
 
 int
-kern___getcwd(struct thread *td, u_char *buf, enum uio_seg bufseg, u_int buflen)
+kern___getcwd(struct thread *td, char *buf, enum uio_seg bufseg, u_int buflen)
 {
 	char *bp, *tmpbuf;
 	struct filedesc *fdp;

Modified: head/sys/sys/syscallsubr.h
==============================================================================
--- head/sys/sys/syscallsubr.h	Sun Jan  4 05:40:41 2015	(r276653)
+++ head/sys/sys/syscallsubr.h	Sun Jan  4 10:34:02 2015	(r276654)
@@ -57,7 +57,7 @@ struct stat;
 struct thr_param;
 struct __wrusage;
 
-int	kern___getcwd(struct thread *td, u_char *buf, enum uio_seg bufseg,
+int	kern___getcwd(struct thread *td, char *buf, enum uio_seg bufseg,
 	    u_int buflen);
 int	kern_accept(struct thread *td, int s, struct sockaddr **name,
 	    socklen_t *namelen, struct file **fp);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201501041034.t04AY3nc048613>