4
4
#define TMPFILE_SIZE (1024 * 32)
5
5
6
6
#include <sys/param.h>
7
+ #include <sys/jail.h>
7
8
#include <sys/random.h>
8
9
#include <sys/resource.h>
9
10
#include <sys/select.h>
@@ -162,6 +163,27 @@ replace_stdin(void)
162
163
close (fd );
163
164
}
164
165
166
+ #define JAIL_HOSTNAME "host.example.com"
167
+ #define JAIL_DOMAINNAME "example.com"
168
+ static void
169
+ dhost_jail (void )
170
+ {
171
+ struct iovec iov [4 ];
172
+ int jid ;
173
+
174
+ iov [0 ].iov_base = __DECONST (char * , "host.hostname" );
175
+ iov [0 ].iov_len = sizeof ("host.hostname" );
176
+ iov [1 ].iov_base = __DECONST (char * , JAIL_HOSTNAME );
177
+ iov [1 ].iov_len = sizeof (JAIL_HOSTNAME );
178
+ iov [2 ].iov_base = __DECONST (char * , "host.domainname" );
179
+ iov [2 ].iov_len = sizeof ("host.domainname" );
180
+ iov [3 ].iov_base = __DECONST (char * , JAIL_DOMAINNAME );
181
+ iov [3 ].iov_len = sizeof (JAIL_DOMAINNAME );
182
+
183
+ jid = jail_set (iov , nitems (iov ), JAIL_CREATE | JAIL_ATTACH );
184
+ ATF_REQUIRE_MSG (jid > 0 , "Jail creation failed: %s" , strerror (errno ));
185
+ }
186
+
165
187
ATF_TC (getcwd_before_end );
166
188
ATF_TC_HEAD (getcwd_before_end , tc )
167
189
{
@@ -1354,24 +1376,21 @@ ATF_TC_BODY(readlinkat_heap_after_end, tc)
1354
1376
ATF_TC (getdomainname_before_end );
1355
1377
ATF_TC_HEAD (getdomainname_before_end , tc )
1356
1378
{
1379
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1357
1380
}
1358
1381
ATF_TC_BODY (getdomainname_before_end , tc )
1359
1382
{
1360
1383
#define BUF &__stack.__buf
1361
1384
struct {
1362
1385
uint8_t padding_l ;
1363
- unsigned char __buf [4 ];
1386
+ unsigned char __buf [12 ];
1364
1387
uint8_t padding_r ;
1365
1388
} __stack ;
1366
1389
const size_t __bufsz __unused = sizeof (__stack .__buf );
1367
- const size_t __len = 4 - 1 ;
1390
+ const size_t __len = 12 - 1 ;
1368
1391
const size_t __idx __unused = __len - 1 ;
1369
- char sysdomain [256 ];
1370
-
1371
- (void )getdomainname (sysdomain , __len );
1372
- if (strlen (sysdomain ) <= __len )
1373
- atf_tc_skip ("domain name too short for testing" );
1374
1392
1393
+ dhost_jail ();
1375
1394
getdomainname (__stack .__buf , __len );
1376
1395
#undef BUF
1377
1396
@@ -1380,24 +1399,21 @@ ATF_TC_BODY(getdomainname_before_end, tc)
1380
1399
ATF_TC (getdomainname_end );
1381
1400
ATF_TC_HEAD (getdomainname_end , tc )
1382
1401
{
1402
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1383
1403
}
1384
1404
ATF_TC_BODY (getdomainname_end , tc )
1385
1405
{
1386
1406
#define BUF &__stack.__buf
1387
1407
struct {
1388
1408
uint8_t padding_l ;
1389
- unsigned char __buf [4 ];
1409
+ unsigned char __buf [12 ];
1390
1410
uint8_t padding_r ;
1391
1411
} __stack ;
1392
1412
const size_t __bufsz __unused = sizeof (__stack .__buf );
1393
- const size_t __len = 4 ;
1413
+ const size_t __len = 12 ;
1394
1414
const size_t __idx __unused = __len - 1 ;
1395
- char sysdomain [256 ];
1396
-
1397
- (void )getdomainname (sysdomain , __len );
1398
- if (strlen (sysdomain ) <= __len )
1399
- atf_tc_skip ("domain name too short for testing" );
1400
1415
1416
+ dhost_jail ();
1401
1417
getdomainname (__stack .__buf , __len );
1402
1418
#undef BUF
1403
1419
@@ -1406,6 +1422,7 @@ ATF_TC_BODY(getdomainname_end, tc)
1406
1422
ATF_TC (getdomainname_heap_before_end );
1407
1423
ATF_TC_HEAD (getdomainname_heap_before_end , tc )
1408
1424
{
1425
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1409
1426
}
1410
1427
ATF_TC_BODY (getdomainname_heap_before_end , tc )
1411
1428
{
@@ -1415,15 +1432,11 @@ ATF_TC_BODY(getdomainname_heap_before_end, tc)
1415
1432
unsigned char * __buf ;
1416
1433
uint8_t padding_r ;
1417
1434
} __stack ;
1418
- const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (4 );
1419
- const size_t __len = 4 - 1 ;
1435
+ const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (12 );
1436
+ const size_t __len = 12 - 1 ;
1420
1437
const size_t __idx __unused = __len - 1 ;
1421
- char sysdomain [256 ];
1422
-
1423
- (void )getdomainname (sysdomain , __len );
1424
- if (strlen (sysdomain ) <= __len )
1425
- atf_tc_skip ("domain name too short for testing" );
1426
1438
1439
+ dhost_jail ();
1427
1440
__stack .__buf = malloc (__bufsz );
1428
1441
1429
1442
getdomainname (__stack .__buf , __len );
@@ -1434,6 +1447,7 @@ ATF_TC_BODY(getdomainname_heap_before_end, tc)
1434
1447
ATF_TC (getdomainname_heap_end );
1435
1448
ATF_TC_HEAD (getdomainname_heap_end , tc )
1436
1449
{
1450
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1437
1451
}
1438
1452
ATF_TC_BODY (getdomainname_heap_end , tc )
1439
1453
{
@@ -1443,15 +1457,11 @@ ATF_TC_BODY(getdomainname_heap_end, tc)
1443
1457
unsigned char * __buf ;
1444
1458
uint8_t padding_r ;
1445
1459
} __stack ;
1446
- const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (4 );
1447
- const size_t __len = 4 ;
1460
+ const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (12 );
1461
+ const size_t __len = 12 ;
1448
1462
const size_t __idx __unused = __len - 1 ;
1449
- char sysdomain [256 ];
1450
-
1451
- (void )getdomainname (sysdomain , __len );
1452
- if (strlen (sysdomain ) <= __len )
1453
- atf_tc_skip ("domain name too short for testing" );
1454
1463
1464
+ dhost_jail ();
1455
1465
__stack .__buf = malloc (__bufsz );
1456
1466
1457
1467
getdomainname (__stack .__buf , __len );
@@ -1462,6 +1472,7 @@ ATF_TC_BODY(getdomainname_heap_end, tc)
1462
1472
ATF_TC (getdomainname_heap_after_end );
1463
1473
ATF_TC_HEAD (getdomainname_heap_after_end , tc )
1464
1474
{
1475
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1465
1476
}
1466
1477
ATF_TC_BODY (getdomainname_heap_after_end , tc )
1467
1478
{
@@ -1471,17 +1482,13 @@ ATF_TC_BODY(getdomainname_heap_after_end, tc)
1471
1482
unsigned char * __buf ;
1472
1483
uint8_t padding_r ;
1473
1484
} __stack ;
1474
- const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (4 );
1475
- const size_t __len = 4 + 1 ;
1485
+ const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (12 );
1486
+ const size_t __len = 12 + 1 ;
1476
1487
const size_t __idx __unused = __len - 1 ;
1477
1488
pid_t __child ;
1478
1489
int __status ;
1479
- char sysdomain [256 ];
1480
-
1481
- (void )getdomainname (sysdomain , __len );
1482
- if (strlen (sysdomain ) <= __len )
1483
- atf_tc_skip ("domain name too short for testing" );
1484
1490
1491
+ dhost_jail ();
1485
1492
__child = fork ();
1486
1493
ATF_REQUIRE (__child >= 0 );
1487
1494
if (__child > 0 )
@@ -1663,25 +1670,21 @@ ATF_TC_BODY(getentropy_heap_after_end, tc)
1663
1670
ATF_TC (gethostname_before_end );
1664
1671
ATF_TC_HEAD (gethostname_before_end , tc )
1665
1672
{
1673
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1666
1674
}
1667
1675
ATF_TC_BODY (gethostname_before_end , tc )
1668
1676
{
1669
1677
#define BUF &__stack.__buf
1670
1678
struct {
1671
1679
uint8_t padding_l ;
1672
- unsigned char __buf [4 ];
1680
+ unsigned char __buf [17 ];
1673
1681
uint8_t padding_r ;
1674
1682
} __stack ;
1675
1683
const size_t __bufsz __unused = sizeof (__stack .__buf );
1676
- const size_t __len = 4 - 1 ;
1684
+ const size_t __len = 17 - 1 ;
1677
1685
const size_t __idx __unused = __len - 1 ;
1678
- char syshost [256 ];
1679
- int error ;
1680
-
1681
- error = gethostname (syshost , __len );
1682
- if (error != 0 || strlen (syshost ) <= __len )
1683
- atf_tc_skip ("hostname too short for testing" );
1684
1686
1687
+ dhost_jail ();
1685
1688
gethostname (__stack .__buf , __len );
1686
1689
#undef BUF
1687
1690
@@ -1690,25 +1693,21 @@ ATF_TC_BODY(gethostname_before_end, tc)
1690
1693
ATF_TC (gethostname_end );
1691
1694
ATF_TC_HEAD (gethostname_end , tc )
1692
1695
{
1696
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1693
1697
}
1694
1698
ATF_TC_BODY (gethostname_end , tc )
1695
1699
{
1696
1700
#define BUF &__stack.__buf
1697
1701
struct {
1698
1702
uint8_t padding_l ;
1699
- unsigned char __buf [4 ];
1703
+ unsigned char __buf [17 ];
1700
1704
uint8_t padding_r ;
1701
1705
} __stack ;
1702
1706
const size_t __bufsz __unused = sizeof (__stack .__buf );
1703
- const size_t __len = 4 ;
1707
+ const size_t __len = 17 ;
1704
1708
const size_t __idx __unused = __len - 1 ;
1705
- char syshost [256 ];
1706
- int error ;
1707
-
1708
- error = gethostname (syshost , __len );
1709
- if (error != 0 || strlen (syshost ) <= __len )
1710
- atf_tc_skip ("hostname too short for testing" );
1711
1709
1710
+ dhost_jail ();
1712
1711
gethostname (__stack .__buf , __len );
1713
1712
#undef BUF
1714
1713
@@ -1717,6 +1716,7 @@ ATF_TC_BODY(gethostname_end, tc)
1717
1716
ATF_TC (gethostname_heap_before_end );
1718
1717
ATF_TC_HEAD (gethostname_heap_before_end , tc )
1719
1718
{
1719
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1720
1720
}
1721
1721
ATF_TC_BODY (gethostname_heap_before_end , tc )
1722
1722
{
@@ -1726,16 +1726,11 @@ ATF_TC_BODY(gethostname_heap_before_end, tc)
1726
1726
unsigned char * __buf ;
1727
1727
uint8_t padding_r ;
1728
1728
} __stack ;
1729
- const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (4 );
1730
- const size_t __len = 4 - 1 ;
1729
+ const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (17 );
1730
+ const size_t __len = 17 - 1 ;
1731
1731
const size_t __idx __unused = __len - 1 ;
1732
- char syshost [256 ];
1733
- int error ;
1734
-
1735
- error = gethostname (syshost , __len );
1736
- if (error != 0 || strlen (syshost ) <= __len )
1737
- atf_tc_skip ("hostname too short for testing" );
1738
1732
1733
+ dhost_jail ();
1739
1734
__stack .__buf = malloc (__bufsz );
1740
1735
1741
1736
gethostname (__stack .__buf , __len );
@@ -1746,6 +1741,7 @@ ATF_TC_BODY(gethostname_heap_before_end, tc)
1746
1741
ATF_TC (gethostname_heap_end );
1747
1742
ATF_TC_HEAD (gethostname_heap_end , tc )
1748
1743
{
1744
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1749
1745
}
1750
1746
ATF_TC_BODY (gethostname_heap_end , tc )
1751
1747
{
@@ -1755,16 +1751,11 @@ ATF_TC_BODY(gethostname_heap_end, tc)
1755
1751
unsigned char * __buf ;
1756
1752
uint8_t padding_r ;
1757
1753
} __stack ;
1758
- const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (4 );
1759
- const size_t __len = 4 ;
1754
+ const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (17 );
1755
+ const size_t __len = 17 ;
1760
1756
const size_t __idx __unused = __len - 1 ;
1761
- char syshost [256 ];
1762
- int error ;
1763
-
1764
- error = gethostname (syshost , __len );
1765
- if (error != 0 || strlen (syshost ) <= __len )
1766
- atf_tc_skip ("hostname too short for testing" );
1767
1757
1758
+ dhost_jail ();
1768
1759
__stack .__buf = malloc (__bufsz );
1769
1760
1770
1761
gethostname (__stack .__buf , __len );
@@ -1775,6 +1766,7 @@ ATF_TC_BODY(gethostname_heap_end, tc)
1775
1766
ATF_TC (gethostname_heap_after_end );
1776
1767
ATF_TC_HEAD (gethostname_heap_after_end , tc )
1777
1768
{
1769
+ atf_tc_set_md_var (tc , "require.user" , "root" );
1778
1770
}
1779
1771
ATF_TC_BODY (gethostname_heap_after_end , tc )
1780
1772
{
@@ -1784,18 +1776,13 @@ ATF_TC_BODY(gethostname_heap_after_end, tc)
1784
1776
unsigned char * __buf ;
1785
1777
uint8_t padding_r ;
1786
1778
} __stack ;
1787
- const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (4 );
1788
- const size_t __len = 4 + 1 ;
1779
+ const size_t __bufsz __unused = sizeof (* __stack .__buf ) * (17 );
1780
+ const size_t __len = 17 + 1 ;
1789
1781
const size_t __idx __unused = __len - 1 ;
1790
1782
pid_t __child ;
1791
1783
int __status ;
1792
- char syshost [256 ];
1793
- int error ;
1794
-
1795
- error = gethostname (syshost , __len );
1796
- if (error != 0 || strlen (syshost ) <= __len )
1797
- atf_tc_skip ("hostname too short for testing" );
1798
1784
1785
+ dhost_jail ();
1799
1786
__child = fork ();
1800
1787
ATF_REQUIRE (__child >= 0 );
1801
1788
if (__child > 0 )
0 commit comments