Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-8]: src/sys/modules/lua Pull up following revision(s) (requested ...



details:   https://anonhg.NetBSD.org/src/rev/27d62655f9ae
branches:  netbsd-8
changeset: 434530:27d62655f9ae
user:      snj <snj%NetBSD.org@localhost>
date:      Sun Jan 07 09:27:32 2018 +0000

description:
Pull up following revision(s) (requested by sevan in ticket #469):
        sys/modules/lua/lua.c: revision 1.24
Fix cargo cult ioctl implementation for LUAINFO: the name and desc fields
are arrays, not pointers, so don't use copyoutstr on them, but instead
copyin/copyout the whole array of structures.
Fixes PR 52864 for me (on sparc64).

diffstat:

 sys/modules/lua/lua.c |  24 ++++++++++++++++++------
 1 files changed, 18 insertions(+), 6 deletions(-)

diffs (48 lines):

diff -r 73fe20fbd31d -r 27d62655f9ae sys/modules/lua/lua.c
--- a/sys/modules/lua/lua.c     Sun Jan 07 09:24:59 2018 +0000
+++ b/sys/modules/lua/lua.c     Sun Jan 07 09:27:32 2018 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: lua.c,v 1.23 2017/05/20 09:46:17 mbalmer Exp $ */
+/*     $NetBSD: lua.c,v 1.23.2.1 2018/01/07 09:27:32 snj Exp $ */
 
 /*
  * Copyright (c) 2011 - 2017 by Marc Balmer <mbalmer%NetBSD.org@localhost>.
@@ -288,6 +288,7 @@
        struct pathbuf *pb;
        struct vattr va;
        struct lua_loadstate ls;
+       struct lua_state_info *states;
        int error, n;
        klua_State *K;
 
@@ -307,14 +308,25 @@
                        LIST_FOREACH(s, &lua_states, lua_next) {
                                if (n > info->num_states)
                                        break;
-                               copyoutstr(s->lua_name, info->states[n].name,
-                                   MAX_LUA_NAME, NULL);
-                               copyoutstr(s->lua_desc, info->states[n].desc,
-                                   MAX_LUA_DESC, NULL);
-                               info->states[n].user = s->K->ks_user;
                                n++;
                        }
                        info->num_states = n;
+                       states = kmem_alloc(sizeof(*states) * n, KM_SLEEP);
+                       if (copyin(info->states, states, sizeof(*states) * n)
+                           == 0) {
+                               n = 0;
+                               LIST_FOREACH(s, &lua_states, lua_next) {
+                                       if (n > info->num_states)
+                                               break;
+                                       strcpy(states[n].name, s->lua_name);
+                                       strcpy(states[n].desc, s->lua_desc);
+                                       states[n].user = s->K->ks_user;
+                                       n++;
+                               }
+                               copyout(states, info->states,
+                                   sizeof(*states) * n);
+                               kmem_free(states, sizeof(*states) * n);
+                       }
                }
                break;
        case LUACREATE:



Home | Main Index | Thread Index | Old Index