|
@@ -953,7 +953,8 @@ out:
|
|
|
* "raddr" thing points to kernel space, and there has to be a wrapper around
|
|
|
* this.
|
|
|
*/
|
|
|
-long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr)
|
|
|
+long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr,
|
|
|
+ unsigned long shmlba)
|
|
|
{
|
|
|
struct shmid_kernel *shp;
|
|
|
unsigned long addr;
|
|
@@ -973,9 +974,9 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr)
|
|
|
if (shmid < 0)
|
|
|
goto out;
|
|
|
else if ((addr = (ulong)shmaddr)) {
|
|
|
- if (addr & (SHMLBA-1)) {
|
|
|
+ if (addr & (shmlba - 1)) {
|
|
|
if (shmflg & SHM_RND)
|
|
|
- addr &= ~(SHMLBA-1); /* round down */
|
|
|
+ addr &= ~(shmlba - 1); /* round down */
|
|
|
else
|
|
|
#ifndef __ARCH_FORCE_SHMLBA
|
|
|
if (addr & ~PAGE_MASK)
|
|
@@ -1107,7 +1108,7 @@ SYSCALL_DEFINE3(shmat, int, shmid, char __user *, shmaddr, int, shmflg)
|
|
|
unsigned long ret;
|
|
|
long err;
|
|
|
|
|
|
- err = do_shmat(shmid, shmaddr, shmflg, &ret);
|
|
|
+ err = do_shmat(shmid, shmaddr, shmflg, &ret, SHMLBA);
|
|
|
if (err)
|
|
|
return err;
|
|
|
force_successful_syscall_return();
|