freebsd32_misc.c (174380) | freebsd32_misc.c (174381) |
---|---|
1/*- 2 * Copyright (c) 2002 Doug Rabson 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2002 Doug Rabson 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/compat/freebsd32/freebsd32_misc.c 174380 2007-12-06 23:23:16Z jhb $"); | 28__FBSDID("$FreeBSD: head/sys/compat/freebsd32/freebsd32_misc.c 174381 2007-12-06 23:35:29Z jhb $"); |
29 30#include "opt_compat.h" 31 32#include <sys/param.h> 33#include <sys/systm.h> 34#include <sys/bus.h> 35#include <sys/clock.h> 36#include <sys/exec.h> --- 29 unchanged lines hidden (view full) --- 66#include <sys/sysent.h> 67#include <sys/sysproto.h> 68#include <sys/thr.h> 69#include <sys/unistd.h> 70#include <sys/ucontext.h> 71#include <sys/vnode.h> 72#include <sys/wait.h> 73#include <sys/ipc.h> | 29 30#include "opt_compat.h" 31 32#include <sys/param.h> 33#include <sys/systm.h> 34#include <sys/bus.h> 35#include <sys/clock.h> 36#include <sys/exec.h> --- 29 unchanged lines hidden (view full) --- 66#include <sys/sysent.h> 67#include <sys/sysproto.h> 68#include <sys/thr.h> 69#include <sys/unistd.h> 70#include <sys/ucontext.h> 71#include <sys/vnode.h> 72#include <sys/wait.h> 73#include <sys/ipc.h> |
74#include <sys/msg.h> 75#include <sys/sem.h> |
|
74#include <sys/shm.h> 75 76#include <vm/vm.h> 77#include <vm/vm_kern.h> 78#include <vm/vm_param.h> 79#include <vm/pmap.h> 80#include <vm/vm_map.h> 81#include <vm/vm_object.h> --- 1232 unchanged lines hidden (view full) --- 1314 return (error); 1315 error = copy_statfs(&s, &s32); 1316 if (error) 1317 return (error); 1318 return (copyout(&s32, uap->buf, sizeof(s32))); 1319} 1320#endif 1321 | 76#include <sys/shm.h> 77 78#include <vm/vm.h> 79#include <vm/vm_kern.h> 80#include <vm/vm_param.h> 81#include <vm/pmap.h> 82#include <vm/vm_map.h> 83#include <vm/vm_object.h> --- 1232 unchanged lines hidden (view full) --- 1316 return (error); 1317 error = copy_statfs(&s, &s32); 1318 if (error) 1319 return (error); 1320 return (copyout(&s32, uap->buf, sizeof(s32))); 1321} 1322#endif 1323 |
1324static void 1325freebsd32_ipcperm_in(struct ipc_perm32 *ip32, struct ipc_perm *ip) 1326{ 1327 1328 CP(*ip32, *ip, cuid); 1329 CP(*ip32, *ip, cgid); 1330 CP(*ip32, *ip, uid); 1331 CP(*ip32, *ip, gid); 1332 CP(*ip32, *ip, mode); 1333 CP(*ip32, *ip, seq); 1334 CP(*ip32, *ip, key); 1335} 1336 1337static void 1338freebsd32_ipcperm_out(struct ipc_perm *ip, struct ipc_perm32 *ip32) 1339{ 1340 1341 CP(*ip, *ip32, cuid); 1342 CP(*ip, *ip32, cgid); 1343 CP(*ip, *ip32, uid); 1344 CP(*ip, *ip32, gid); 1345 CP(*ip, *ip32, mode); 1346 CP(*ip, *ip32, seq); 1347 CP(*ip, *ip32, key); 1348} 1349 |
|
1322int 1323freebsd32_semsys(struct thread *td, struct freebsd32_semsys_args *uap) 1324{ | 1350int 1351freebsd32_semsys(struct thread *td, struct freebsd32_semsys_args *uap) 1352{ |
1325 /* 1326 * Vector through to semsys if it is loaded. 1327 */ 1328 return sysent[SYS_semsys].sy_call(td, uap); | 1353 1354 switch (uap->which) { 1355 case 0: 1356 return (freebsd32_semctl(td, 1357 (struct freebsd32_semctl_args *)&uap->a2)); 1358 default: 1359 return (semsys(td, (struct semsys_args *)uap)); 1360 } |
1329} 1330 1331int | 1361} 1362 1363int |
1364freebsd32_semctl(struct thread *td, struct freebsd32_semctl_args *uap) 1365{ 1366 struct semid_ds32 dsbuf32; 1367 struct semid_ds dsbuf; 1368 union semun semun; 1369 union semun32 arg; 1370 register_t rval; 1371 int error; 1372 1373 switch (uap->cmd) { 1374 case SEM_STAT: 1375 case IPC_SET: 1376 case IPC_STAT: 1377 case GETALL: 1378 case SETVAL: 1379 case SETALL: 1380 error = copyin(uap->arg, &arg, sizeof(arg)); 1381 if (error) 1382 return (error); 1383 break; 1384 } 1385 1386 switch (uap->cmd) { 1387 case SEM_STAT: 1388 case IPC_STAT: 1389 semun.buf = &dsbuf; 1390 break; 1391 case IPC_SET: 1392 error = copyin(PTRIN(arg.buf), &dsbuf32, sizeof(dsbuf32)); 1393 if (error) 1394 return (error); 1395 freebsd32_ipcperm_in(&dsbuf32.sem_perm, &dsbuf.sem_perm); 1396 PTRIN_CP(dsbuf32, dsbuf, sem_base); 1397 CP(dsbuf32, dsbuf, sem_nsems); 1398 CP(dsbuf32, dsbuf, sem_otime); 1399 CP(dsbuf32, dsbuf, sem_pad1); 1400 CP(dsbuf32, dsbuf, sem_ctime); 1401 CP(dsbuf32, dsbuf, sem_pad2); 1402 CP(dsbuf32, dsbuf, sem_pad3[0]); 1403 CP(dsbuf32, dsbuf, sem_pad3[1]); 1404 CP(dsbuf32, dsbuf, sem_pad3[2]); 1405 CP(dsbuf32, dsbuf, sem_pad3[3]); 1406 semun.buf = &dsbuf; 1407 break; 1408 case GETALL: 1409 case SETALL: 1410 semun.array = PTRIN(arg.array); 1411 break; 1412 case SETVAL: 1413 semun.val = arg.val; 1414 break; 1415 } 1416 1417 error = kern_semctl(td, uap->semid, uap->semnum, uap->cmd, &semun, 1418 &rval); 1419 if (error) 1420 return (error); 1421 1422 switch (uap->cmd) { 1423 case SEM_STAT: 1424 case IPC_STAT: 1425 freebsd32_ipcperm_out(&dsbuf.sem_perm, &dsbuf32.sem_perm); 1426 PTROUT_CP(dsbuf, dsbuf32, sem_base); 1427 CP(dsbuf, dsbuf32, sem_nsems); 1428 CP(dsbuf, dsbuf32, sem_otime); 1429 CP(dsbuf, dsbuf32, sem_pad1); 1430 CP(dsbuf, dsbuf32, sem_ctime); 1431 CP(dsbuf, dsbuf32, sem_pad2); 1432 CP(dsbuf, dsbuf32, sem_pad3[0]); 1433 CP(dsbuf, dsbuf32, sem_pad3[1]); 1434 CP(dsbuf, dsbuf32, sem_pad3[2]); 1435 CP(dsbuf, dsbuf32, sem_pad3[3]); 1436 error = copyout(&dsbuf32, PTRIN(arg.buf), sizeof(dsbuf32)); 1437 break; 1438 } 1439 1440 if (error == 0) 1441 td->td_retval[0] = rval; 1442 return (error); 1443} 1444 1445int |
|
1332freebsd32_msgsys(struct thread *td, struct freebsd32_msgsys_args *uap) 1333{ | 1446freebsd32_msgsys(struct thread *td, struct freebsd32_msgsys_args *uap) 1447{ |
1448 |
|
1334 switch (uap->which) { | 1449 switch (uap->which) { |
1450 case 0: 1451 return (freebsd32_msgctl(td, 1452 (struct freebsd32_msgctl_args *)&uap->a2)); |
|
1335 case 2: 1336 return (freebsd32_msgsnd(td, 1337 (struct freebsd32_msgsnd_args *)&uap->a2)); | 1453 case 2: 1454 return (freebsd32_msgsnd(td, 1455 (struct freebsd32_msgsnd_args *)&uap->a2)); |
1338 break; | |
1339 case 3: 1340 return (freebsd32_msgrcv(td, 1341 (struct freebsd32_msgrcv_args *)&uap->a2)); | 1456 case 3: 1457 return (freebsd32_msgrcv(td, 1458 (struct freebsd32_msgrcv_args *)&uap->a2)); |
1342 break; | |
1343 default: | 1459 default: |
1344 /* 1345 * Vector through to msgsys if it is loaded. 1346 */ 1347 return (sysent[SYS_msgsys].sy_call(td, uap)); 1348 break; | 1460 return (msgsys(td, (struct msgsys_args *)uap)); |
1349 } 1350} 1351 1352int | 1461 } 1462} 1463 1464int |
1465freebsd32_msgctl(struct thread *td, struct freebsd32_msgctl_args *uap) 1466{ 1467 struct msqid_ds msqbuf; 1468 struct msqid_ds32 msqbuf32; 1469 int error; 1470 1471 if (uap->cmd == IPC_SET) { 1472 error = copyin(uap->buf, &msqbuf32, sizeof(msqbuf32)); 1473 if (error) 1474 return (error); 1475 freebsd32_ipcperm_in(&msqbuf32.msg_perm, &msqbuf.msg_perm); 1476 PTRIN_CP(msqbuf32, msqbuf, msg_first); 1477 PTRIN_CP(msqbuf32, msqbuf, msg_last); 1478 CP(msqbuf32, msqbuf, msg_cbytes); 1479 CP(msqbuf32, msqbuf, msg_qnum); 1480 CP(msqbuf32, msqbuf, msg_qbytes); 1481 CP(msqbuf32, msqbuf, msg_lspid); 1482 CP(msqbuf32, msqbuf, msg_lrpid); 1483 CP(msqbuf32, msqbuf, msg_stime); 1484 CP(msqbuf32, msqbuf, msg_pad1); 1485 CP(msqbuf32, msqbuf, msg_rtime); 1486 CP(msqbuf32, msqbuf, msg_pad2); 1487 CP(msqbuf32, msqbuf, msg_ctime); 1488 CP(msqbuf32, msqbuf, msg_pad3); 1489 CP(msqbuf32, msqbuf, msg_pad4[0]); 1490 CP(msqbuf32, msqbuf, msg_pad4[1]); 1491 CP(msqbuf32, msqbuf, msg_pad4[2]); 1492 CP(msqbuf32, msqbuf, msg_pad4[3]); 1493 } 1494 error = kern_msgctl(td, uap->msqid, uap->cmd, &msqbuf); 1495 if (error) 1496 return (error); 1497 if (uap->cmd == IPC_STAT) { 1498 freebsd32_ipcperm_out(&msqbuf.msg_perm, &msqbuf32.msg_perm); 1499 PTROUT_CP(msqbuf, msqbuf32, msg_first); 1500 PTROUT_CP(msqbuf, msqbuf32, msg_last); 1501 CP(msqbuf, msqbuf32, msg_cbytes); 1502 CP(msqbuf, msqbuf32, msg_qnum); 1503 CP(msqbuf, msqbuf32, msg_qbytes); 1504 CP(msqbuf, msqbuf32, msg_lspid); 1505 CP(msqbuf, msqbuf32, msg_lrpid); 1506 CP(msqbuf, msqbuf32, msg_stime); 1507 CP(msqbuf, msqbuf32, msg_pad1); 1508 CP(msqbuf, msqbuf32, msg_rtime); 1509 CP(msqbuf, msqbuf32, msg_pad2); 1510 CP(msqbuf, msqbuf32, msg_ctime); 1511 CP(msqbuf, msqbuf32, msg_pad3); 1512 CP(msqbuf, msqbuf32, msg_pad4[0]); 1513 CP(msqbuf, msqbuf32, msg_pad4[1]); 1514 CP(msqbuf, msqbuf32, msg_pad4[2]); 1515 CP(msqbuf, msqbuf32, msg_pad4[3]); 1516 error = copyout(&msqbuf32, uap->buf, sizeof(struct msqid_ds32)); 1517 } 1518 return (error); 1519} 1520 1521int |
|
1353freebsd32_msgsnd(struct thread *td, struct freebsd32_msgsnd_args *uap) 1354{ 1355 const void *msgp; 1356 long mtype; 1357 int32_t mtype32; 1358 int error; 1359 1360 msgp = PTRIN(uap->msgp); --- 78 unchanged lines hidden (view full) --- 1439 struct shminfo32 shminfo32; 1440 } u32; 1441 size_t sz; 1442 1443 if (uap->cmd == IPC_SET) { 1444 if ((error = copyin(uap->buf, &u32.shmid_ds32, 1445 sizeof(u32.shmid_ds32)))) 1446 goto done; | 1522freebsd32_msgsnd(struct thread *td, struct freebsd32_msgsnd_args *uap) 1523{ 1524 const void *msgp; 1525 long mtype; 1526 int32_t mtype32; 1527 int error; 1528 1529 msgp = PTRIN(uap->msgp); --- 78 unchanged lines hidden (view full) --- 1608 struct shminfo32 shminfo32; 1609 } u32; 1610 size_t sz; 1611 1612 if (uap->cmd == IPC_SET) { 1613 if ((error = copyin(uap->buf, &u32.shmid_ds32, 1614 sizeof(u32.shmid_ds32)))) 1615 goto done; |
1447 CP(u32.shmid_ds32, u.shmid_ds, shm_perm.cuid); 1448 CP(u32.shmid_ds32, u.shmid_ds, shm_perm.cgid); 1449 CP(u32.shmid_ds32, u.shmid_ds, shm_perm.uid); 1450 CP(u32.shmid_ds32, u.shmid_ds, shm_perm.gid); 1451 CP(u32.shmid_ds32, u.shmid_ds, shm_perm.mode); 1452 CP(u32.shmid_ds32, u.shmid_ds, shm_perm.seq); 1453 CP(u32.shmid_ds32, u.shmid_ds, shm_perm.key); | 1616 freebsd32_ipcperm_in(&u32.shmid_ds32.shm_perm, 1617 &u.shmid_ds.shm_perm); |
1454 CP(u32.shmid_ds32, u.shmid_ds, shm_segsz); 1455 CP(u32.shmid_ds32, u.shmid_ds, shm_lpid); 1456 CP(u32.shmid_ds32, u.shmid_ds, shm_cpid); 1457 CP(u32.shmid_ds32, u.shmid_ds, shm_nattch); 1458 CP(u32.shmid_ds32, u.shmid_ds, shm_atime); 1459 CP(u32.shmid_ds32, u.shmid_ds, shm_dtime); 1460 CP(u32.shmid_ds32, u.shmid_ds, shm_ctime); 1461 PTRIN_CP(u32.shmid_ds32, u.shmid_ds, shm_internal); --- 21 unchanged lines hidden (view full) --- 1483 CP(u.shm_info, u32.shm_info32, shm_swp); 1484 CP(u.shm_info, u32.shm_info32, swap_attempts); 1485 CP(u.shm_info, u32.shm_info32, swap_successes); 1486 error = copyout(&u32.shm_info32, uap->buf, 1487 sizeof(u32.shm_info32)); 1488 break; 1489 case SHM_STAT: 1490 case IPC_STAT: | 1618 CP(u32.shmid_ds32, u.shmid_ds, shm_segsz); 1619 CP(u32.shmid_ds32, u.shmid_ds, shm_lpid); 1620 CP(u32.shmid_ds32, u.shmid_ds, shm_cpid); 1621 CP(u32.shmid_ds32, u.shmid_ds, shm_nattch); 1622 CP(u32.shmid_ds32, u.shmid_ds, shm_atime); 1623 CP(u32.shmid_ds32, u.shmid_ds, shm_dtime); 1624 CP(u32.shmid_ds32, u.shmid_ds, shm_ctime); 1625 PTRIN_CP(u32.shmid_ds32, u.shmid_ds, shm_internal); --- 21 unchanged lines hidden (view full) --- 1647 CP(u.shm_info, u32.shm_info32, shm_swp); 1648 CP(u.shm_info, u32.shm_info32, swap_attempts); 1649 CP(u.shm_info, u32.shm_info32, swap_successes); 1650 error = copyout(&u32.shm_info32, uap->buf, 1651 sizeof(u32.shm_info32)); 1652 break; 1653 case SHM_STAT: 1654 case IPC_STAT: |
1491 CP(u.shmid_ds, u32.shmid_ds32, shm_perm.cuid); 1492 CP(u.shmid_ds, u32.shmid_ds32, shm_perm.cgid); 1493 CP(u.shmid_ds, u32.shmid_ds32, shm_perm.uid); 1494 CP(u.shmid_ds, u32.shmid_ds32, shm_perm.gid); 1495 CP(u.shmid_ds, u32.shmid_ds32, shm_perm.mode); 1496 CP(u.shmid_ds, u32.shmid_ds32, shm_perm.seq); 1497 CP(u.shmid_ds, u32.shmid_ds32, shm_perm.key); | 1655 freebsd32_ipcperm_out(&u.shmid_ds.shm_perm, 1656 &u32.shmid_ds32.shm_perm); |
1498 CP(u.shmid_ds, u32.shmid_ds32, shm_segsz); 1499 CP(u.shmid_ds, u32.shmid_ds32, shm_lpid); 1500 CP(u.shmid_ds, u32.shmid_ds32, shm_cpid); 1501 CP(u.shmid_ds, u32.shmid_ds32, shm_nattch); 1502 CP(u.shmid_ds, u32.shmid_ds32, shm_atime); 1503 CP(u.shmid_ds, u32.shmid_ds32, shm_dtime); 1504 CP(u.shmid_ds, u32.shmid_ds32, shm_ctime); 1505 PTROUT_CP(u.shmid_ds, u32.shmid_ds32, shm_internal); --- 822 unchanged lines hidden --- | 1657 CP(u.shmid_ds, u32.shmid_ds32, shm_segsz); 1658 CP(u.shmid_ds, u32.shmid_ds32, shm_lpid); 1659 CP(u.shmid_ds, u32.shmid_ds32, shm_cpid); 1660 CP(u.shmid_ds, u32.shmid_ds32, shm_nattch); 1661 CP(u.shmid_ds, u32.shmid_ds32, shm_atime); 1662 CP(u.shmid_ds, u32.shmid_ds32, shm_dtime); 1663 CP(u.shmid_ds, u32.shmid_ds32, shm_ctime); 1664 PTROUT_CP(u.shmid_ds, u32.shmid_ds32, shm_internal); --- 822 unchanged lines hidden --- |