tech-kern archive

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

Re: compat_netbsd32 swapctl



In article <20140129153713.GL5645%homeworld.netbsd.org@localhost>,
Emmanuel Dreyfus  <manu%netbsd.org@localhost> wrote:
>On Wed, Jan 29, 2014 at 01:48:35PM +0100, Martin Husemann wrote:
>> My vote for this special case: hard code it #ifdef __x86_64__.
>> If we run into other instances, we can add a define (like: DEV_T_ALIGN_32).
>
>Here is a patch that fixes the problem.
>
>+              default:
>+                      panic("unexpected cmd = %d", SCARG(&ua, cmd));
>+                      break;

Anyone can panic the kernel now...

>+              }
>+
>+              *retval = 0;
>+              SCARG(&ssa, cmd) = SCARG(&ua, cmd);
>+              SCARG(&ssa, misc) = 1;
>+
>+              for (i = 0; i < SCARG(&ua, misc); i++) {
>+                      SCARG(&ssa, arg) = 
>+                          (char *)SCARG(&ua, arg) + (i * swapctl32_len);
>+
>+                      if ((error = sys_swapctl(l, &ssa, &rv)) != 0) {
>+                              *retval = rv;
>+                              break;
>+                      }

I think you probably want to do some struct conversion because if sys_swapctl
expects to write to a bigger buffer, you can end up trashing the user's stack.

christos



Home | Main Index | Thread Index | Old Index