author | Patrick Einheber <patrick.einheber@oracle.com> |
Wed, 12 Oct 2016 08:38:46 -0700 | |
changeset 7093 | a50590d00730 |
parent 5518 | c47fe0edc204 |
permissions | -rw-r--r-- |
5518
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
1082
diff
changeset
|
1 |
# Fix for CVE-2012-3410. |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
1082
diff
changeset
|
2 |
# Solaris-specific. There are no threads in bash, therefore |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
1082
diff
changeset
|
3 |
# no concurrency issues on accessing a static buffer. |
c47fe0edc204
20612604 upgrade bash to 4.3
Stefan Teleman <stefan.teleman@oracle.com>
parents:
1082
diff
changeset
|
4 |
# Not for upstream, their fix is too Linux-specific |
1082
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
5 |
--- lib/sh/eaccess.c 2012-10-09 12:45:17.924274300 -0700 |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
6 |
+++ lib/sh/eaccess.c 2012-10-09 12:44:21.930979200 -0700 |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
7 |
@@ -40,6 +40,10 @@ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
8 |
#if !defined (_POSIX_VERSION) && defined (HAVE_SYS_FILE_H) |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
9 |
# include <sys/file.h> |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
10 |
#endif /* !_POSIX_VERSION */ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
11 |
+ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
12 |
+#include <string.h> /* memset(3C) */ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
13 |
+#include <limits.h> /* _XOPEN_PATH_MAX */ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
14 |
+ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
15 |
#include "posixstat.h" |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
16 |
#include "filecntl.h" |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
17 |
|
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
18 |
@@ -82,7 +86,7 @@ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
19 |
const char *path; |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
20 |
struct stat *finfo; |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
21 |
{ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
22 |
- static char *pbuf = 0; |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
23 |
+ static char pbuf[_XOPEN_PATH_MAX + 1]; |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
24 |
|
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
25 |
if (*path == '\0') |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
26 |
{ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
27 |
@@ -108,9 +112,11 @@ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
28 |
trailing slash. Make sure /dev/fd/xx really uses DEV_FD_PREFIX/xx. |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
29 |
On most systems, with the notable exception of linux, this is |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
30 |
effectively a no-op. */ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
31 |
- pbuf = xrealloc (pbuf, sizeof (DEV_FD_PREFIX) + strlen (path + 8)); |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
32 |
+ /* The way CVE-2012-3410 was fixed is wrong */ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
33 |
+ (void) memset (pbuf, '\0', sizeof(pbuf)); |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
34 |
strcpy (pbuf, DEV_FD_PREFIX); |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
35 |
- strcat (pbuf, path + 8); |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
36 |
+ strncat (pbuf, path + 8, |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
37 |
+ (size_t) (sizeof(pbuf) - sizeof(DEV_FD_PREFIX))); |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
38 |
return (stat (pbuf, finfo)); |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
39 |
#endif /* !HAVE_DEV_FD */ |
6d49548fa9da
15754923 SUNBT7111705 Upgrade bash to 4.2
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
40 |
} |