Re: svn commit: r220158 - in head/sys: compat/freebsd32 kern sys

2011-03-31 Thread Pan Tsu
Konstantin Belousov k...@freebsd.org writes:

 Author: kib
 Date: Wed Mar 30 14:46:12 2011
 New Revision: 220158
 URL: http://svn.freebsd.org/changeset/base/220158

 Log:
   Provide compat32 shims for kldstat(2).
   
   Requested and tested by:jpaetzel
   MFC after:  1 week

It breaks loading modules from loader(8) for me. The box panics early

  #13 0x804f2f2a in sysctl_find_oidname (name=0x80eec156 
kstat, list=0x657a69735f796c)
  at /usr/src/sys/kern/kern_sysctl.c:106
  #14 0x804f3e69 in sysctl_register_oid (oidp=0x80ef0a80)
  at /usr/src/sys/kern/kern_sysctl.c:149
  #15 0x804cb83c in linker_file_register_sysctls (lf=Variable lf is 
not available.
  ) at /usr/src/sys/kern/kern_linker.c:301
  #16 0x804cd112 in linker_preload (arg=Variable arg is not available.
  ) at /usr/src/sys/kern/kern_linker.c:1624
  #17 0x80499ad7 in mi_startup () at /usr/src/sys/kern/init_main.c:258
  #18 0x80299a3c in btext () at /usr/src/sys/amd64/amd64/locore.S:81
  [...]
___
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to svn-src-all-unsubscr...@freebsd.org


Re: svn commit: r220158 - in head/sys: compat/freebsd32 kern sys

2011-03-31 Thread Kostik Belousov
On Thu, Mar 31, 2011 at 11:07:36AM +0400, Pan Tsu wrote:
 Konstantin Belousov k...@freebsd.org writes:
 
  Author: kib
  Date: Wed Mar 30 14:46:12 2011
  New Revision: 220158
  URL: http://svn.freebsd.org/changeset/base/220158
 
  Log:
Provide compat32 shims for kldstat(2).

Requested and tested by:  jpaetzel
MFC after:1 week
 
 It breaks loading modules from loader(8) for me. The box panics early
 
   #13 0x804f2f2a in sysctl_find_oidname (name=0x80eec156 
 kstat, list=0x657a69735f796c)
   at /usr/src/sys/kern/kern_sysctl.c:106
   #14 0x804f3e69 in sysctl_register_oid (oidp=0x80ef0a80)
   at /usr/src/sys/kern/kern_sysctl.c:149
   #15 0x804cb83c in linker_file_register_sysctls (lf=Variable lf is 
 not available.
   ) at /usr/src/sys/kern/kern_linker.c:301
   #16 0x804cd112 in linker_preload (arg=Variable arg is not 
 available.
   ) at /usr/src/sys/kern/kern_linker.c:1624
   #17 0x80499ad7 in mi_startup () at /usr/src/sys/kern/init_main.c:258
   #18 0x80299a3c in btext () at /usr/src/sys/amd64/amd64/locore.S:81
   [...]
What supports your claim that the referenced commit breaks early
module loading ? You even did not provided the panic message, btw.

Commit only changed the wrapper around kldstat(2) syscall, that cannot
be used during bootstrap, and the changed code does not reference kldstat(9).
The later cannot prove that the change did not break something, but
due to its nature, it is unlikely.


pgpkyPe8Pe5Ud.pgp
Description: PGP signature


svn commit: r220158 - in head/sys: compat/freebsd32 kern sys

2011-03-30 Thread Konstantin Belousov
Author: kib
Date: Wed Mar 30 14:46:12 2011
New Revision: 220158
URL: http://svn.freebsd.org/changeset/base/220158

Log:
  Provide compat32 shims for kldstat(2).
  
  Requested and tested by:  jpaetzel
  MFC after:1 week

Modified:
  head/sys/compat/freebsd32/freebsd32.h
  head/sys/compat/freebsd32/freebsd32_misc.c
  head/sys/compat/freebsd32/syscalls.master
  head/sys/kern/kern_linker.c
  head/sys/sys/syscallsubr.h

Modified: head/sys/compat/freebsd32/freebsd32.h
==
--- head/sys/compat/freebsd32/freebsd32.h   Wed Mar 30 14:15:18 2011
(r220157)
+++ head/sys/compat/freebsd32/freebsd32.h   Wed Mar 30 14:46:12 2011
(r220158)
@@ -336,4 +336,23 @@ struct kinfo_proc32 {
int ki_tdflags;
 };
 
+struct kld32_file_stat_1 {
+   int version;/* set to sizeof(struct kld_file_stat_1) */
+   charname[MAXPATHLEN];
+   int refs;
+   int id;
+   uint32_t address;   /* load address */
+   uint32_t size;  /* size in bytes */
+};
+
+struct kld32_file_stat {
+   int version;/* set to sizeof(struct kld_file_stat) */
+   charname[MAXPATHLEN];
+   int refs;
+   int id;
+   uint32_t address;   /* load address */
+   uint32_t size;  /* size in bytes */
+   charpathname[MAXPATHLEN];
+};
+
 #endif /* !_COMPAT_FREEBSD32_FREEBSD32_H_ */

Modified: head/sys/compat/freebsd32/freebsd32_misc.c
==
--- head/sys/compat/freebsd32/freebsd32_misc.c  Wed Mar 30 14:15:18 2011
(r220157)
+++ head/sys/compat/freebsd32/freebsd32_misc.c  Wed Mar 30 14:46:12 2011
(r220158)
@@ -43,6 +43,7 @@ __FBSDID($FreeBSD$);
 #include sys/jail.h
 #include sys/kernel.h
 #include sys/limits.h
+#include sys/linker.h
 #include sys/lock.h
 #include sys/malloc.h
 #include sys/file.h  /* Must come after sys/malloc.h */
@@ -2669,3 +2670,29 @@ freebsd32_copyout_strings(struct image_p
return ((register_t *)stack_base);
 }
 
+int
+freebsd32_kldstat(struct thread *td, struct freebsd32_kldstat_args *uap)
+{
+   struct kld_file_stat stat;
+   struct kld32_file_stat stat32;
+   int error, version;
+
+   if ((error = copyin(uap-stat-version, version, sizeof(version)))
+   != 0)
+   return (error);
+   if (version != sizeof(struct kld32_file_stat_1) 
+   version != sizeof(struct kld32_file_stat))
+   return (EINVAL);
+
+   error = kern_kldstat(td, uap-fileid, stat);
+   if (error != 0)
+   return (error);
+
+   bcopy(stat.name[0], stat32.name[0], sizeof(stat.name));
+   CP(stat, stat32, refs);
+   CP(stat, stat32, id);
+   PTROUT_CP(stat, stat32, address);
+   CP(stat, stat32, size);
+   bcopy(stat.pathname[0], stat32.pathname[0], sizeof(stat.pathname));
+   return (copyout(stat32, uap-stat, version));
+}

Modified: head/sys/compat/freebsd32/syscalls.master
==
--- head/sys/compat/freebsd32/syscalls.master   Wed Mar 30 14:15:18 2011
(r220157)
+++ head/sys/compat/freebsd32/syscalls.master   Wed Mar 30 14:46:12 2011
(r220158)
@@ -533,8 +533,8 @@
 305AUE_MODUNLOAD   NOPROTO { int kldunload(int fileid); }
 306AUE_NULLNOPROTO { int kldfind(const char *file); }
 307AUE_NULLNOPROTO { int kldnext(int fileid); }
-308AUE_NULLNOPROTO { int kldstat(int fileid, \
-   struct kld_file_stat* stat); }
+308AUE_NULLSTD { int freebsd32_kldstat(int fileid, \
+   struct kld32_file_stat* stat); }
 309AUE_NULLNOPROTO { int kldfirstmod(int fileid); }
 310AUE_GETSID  NOPROTO { int getsid(pid_t pid); }
 311AUE_SETRESUID   NOPROTO { int setresuid(uid_t ruid, uid_t euid, \

Modified: head/sys/kern/kern_linker.c
==
--- head/sys/kern/kern_linker.c Wed Mar 30 14:15:18 2011(r220157)
+++ head/sys/kern/kern_linker.c Wed Mar 30 14:46:12 2011(r220158)
@@ -1201,29 +1201,39 @@ int
 kldstat(struct thread *td, struct kldstat_args *uap)
 {
struct kld_file_stat stat;
-   linker_file_t lf;
-   int error, namelen, version, version_num;
+   int error, version;
 
/*
 * Check the version of the user's structure.
 */
-   if ((error = copyin(uap-stat-version, version, sizeof(version))) != 
0)
+   if ((error = copyin(uap-stat-version, version, sizeof(version)))
+   != 0)
return (error);
-   if (version == sizeof(struct kld_file_stat_1))
-   version_num = 1;
-   else if (version == sizeof(struct kld_file_stat))
-   version_num = 2;
-   else
+   if