d3db42d252
- change version to openafs-1.8.13.g... since the new stable release is 1.8.13 - remove patch handle_backports.diff, it is now included upstream - remove intermediate patches: * 03b280649f5e22ed74c217d7c98c3416a2fa9052: Linux-6.10: remove includes for asm/ia32_unistd.h * 0f6a3a402f4a66114da9231032bd68cdc4dee7bc: Linux-6.10: Use filemap_alloc_folio when avail * 658942f2791fad5e33ec7542158c16dfc66eed39: Linux-6.10: define a wrapper for vmalloc * d8b56f21994ce66d8daebb7d69e792f34c1a19ed: afs: avoid empty-body warning * 7097eec17bc01bcfc12c4d299136b2d3b94ec3d7: Linux 6.10: Move 'inline' before func return type OBS-URL: https://build.opensuse.org/package/show/filesystems/openafs?expand=0&rev=129
957 lines
40 KiB
Plaintext
957 lines
40 KiB
Plaintext
commit b151451269ec41b5723484596e7dd40f9ab8824a (HEAD -> openafs-stable-1_8_x, origin/openafs-stable-1_8_x)
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Tue Nov 12 20:29:24 2024 -0600
|
|
|
|
ptserver: Add xdr_namelist to liboafs_prot.la.sym
|
|
|
|
Commit 1f5e1ef9e3 (OPENAFS-SA-2024-003: Run xdr_free for retried RPCs)
|
|
added a couple of references to xdr_namelist, which currently causes a
|
|
build failure on AIX:
|
|
|
|
/bin/sh ../../libtool --quiet --mode=link --tag=CC xlc_r [...] -o pts pts.o ../../src/ptserver/liboafs_prot.la [...]
|
|
ld: 0711-317 ERROR: Undefined symbol: xdr_namelist
|
|
ld: 0711-345 Use the -bloadmap or -bnoquiet option to obtain more information.
|
|
make: 1254-004 The error code from the last command is 8.
|
|
|
|
To avoid this, add xdr_namelist to liboafs_prot.la.sym.
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15954
|
|
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
|
|
Tested-by: BuildBot <buildbot@rampaginggeek.com>
|
|
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
|
|
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
|
|
(cherry picked from commit 4f82b5bd49a3c83c990d64d06cb6389969826208)
|
|
|
|
Change-Id: I8a7272d1b94bd02295ef63b70a4247a4cf6e70f6
|
|
Reviewed-on: https://gerrit.openafs.org/15955
|
|
Tested-by: BuildBot <buildbot@rampaginggeek.com>
|
|
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
|
|
Reviewed-by: Cheyenne Wills <cwills@sinenomine.net>
|
|
Reviewed-by: Mark Vitale <mvitale@sinenomine.net>
|
|
Reviewed-by: Michael Meffie <mmeffie@sinenomine.net>
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit c1beae2622fe6fbdda2353a7da2090fc23595617
|
|
Author: Benjamin Kaduk <kaduk@mit.edu>
|
|
Date: Fri Nov 8 14:03:53 2024 -0800
|
|
|
|
Make OpenAFS 1.8.13
|
|
|
|
Update version strings for the 1.8.13 release.
|
|
|
|
Change-Id: Ic7f75226f3ba0f51f17c8e123c8cdbdab3ff6c7f
|
|
Reviewed-on: https://gerrit.openafs.org/15949
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 7ad61adb706bd53be287f8620ac67720434b3c24
|
|
Author: Benjamin Kaduk <kaduk@mit.edu>
|
|
Date: Fri Nov 8 13:57:28 2024 -0800
|
|
|
|
Update NEWS for OpenAFS 1.8.13
|
|
|
|
Change-Id: I8e25f6d4719f403b07a8faad733d858a8872620f
|
|
Reviewed-on: https://gerrit.openafs.org/15948
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 37e585f0841803cdf3a1f99770034890ba162d7c
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Thu Oct 15 21:07:17 2020 -0500
|
|
|
|
OPENAFS-SA-2024-003: xdr: Initialize memory for INOUT args
|
|
|
|
CVE-2024-10397
|
|
|
|
Currently, there are a few callers of RPCs that specify some data for
|
|
an INOUT parameter, but do not initialize the memory for that data.
|
|
This can result in the uninitialized memory being sent to the peer
|
|
when the argument is processed as an IN argument. Simply clear the
|
|
relevant data before running the RPC to avoid this.
|
|
|
|
The relevant RPCs and arguments are:
|
|
|
|
- For RMTSYS_Pioctl, the 'OutData' argument.
|
|
|
|
- For BUDB_GetVolumes, the 'volumes' argument.
|
|
-- via DBLookupByVolume -> bcdb_LookupVolume -> ubik_BUDB_GetVolumes
|
|
-- and via bc_Restorer -> bcdb_FindVolumes -> ubik_BUDB_GetVolumes
|
|
|
|
- For KAA_Authenticate_old / KAA_Authenticate, this can happen with
|
|
the 'answer' argument in ka_Authenticate if KAA_AuthenticateV2 or
|
|
KAA_Authenticate return RXGEN_OPCODE, but the server manages to
|
|
populate oanswer.SeqLen with non-zero.
|
|
|
|
For all of these, make sure the memory is blanked before running the
|
|
relevant RPC. For ka_Authenticate, reset oanswer.SeqLen to 0 to avoid
|
|
sending any data, but still blank 'answer' and 'answer_old' just to be
|
|
safe.
|
|
|
|
FIXES 135043
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15925
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit c4e28c2afe743aa323be57ef3b0faec13027e678)
|
|
|
|
Change-Id: If44320c1efde98c53eed88099cd978ef89f4c0d8
|
|
Reviewed-on: https://gerrit.openafs.org/15947
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 4871f8ad2775e97bb85ff7efc33a4ad8d3f6d9d1
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Fri Oct 16 10:55:15 2020 -0500
|
|
|
|
OPENAFS-SA-2024-003: sys: Don't over-copy RMTSYS_Pioctl output data
|
|
|
|
CVE-2024-10397
|
|
|
|
Here, 'OutData' only has OutData.rmtbulk_len bytes in it. We know that
|
|
OutData.rmtbulk_len is at most data->out_size, but it could be
|
|
smaller. So, only copy OutData.rmtbulk_len bytes, not data->out_size,
|
|
since data->out_size could be more than the number of bytes we have
|
|
allocated in OutData.
|
|
|
|
FIXES 135043
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15924
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit f31a79d749abc8e64a8d9ac748bb2b5457875099)
|
|
|
|
Change-Id: Ic05751d05c7c8862770188131110cc602c9b93b7
|
|
Reviewed-on: https://gerrit.openafs.org/15946
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 25ad3931d5c03ead625a96e6b626febeb3e20453
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Fri Oct 16 10:52:03 2020 -0500
|
|
|
|
OPENAFS-SA-2024-003: Run xdr_free for retried RPCs
|
|
|
|
CVE-2024-10397
|
|
|
|
A few areas of code retry the same RPC, like so:
|
|
|
|
do {
|
|
code = VL_SomeRPC(rxconn, &array_out);
|
|
} while (some_condition);
|
|
xdr_free((xdrproc_t) xdr_foo, &array_out);
|
|
|
|
Or try a different version/variant of an RPC (e.g.
|
|
VLDB_ListAttributesN2 -> VLDB_ListAttributes).
|
|
|
|
If the first RPC call causes the output array to be allocated with
|
|
length N, then the subsequent RPC calls may fail if the server
|
|
responds with an array larger than N.
|
|
|
|
Furthermore, if the subsequent call responds with an array smaller
|
|
than N, then when we xdr_free the array, our length will be smaller
|
|
than the actual number of allocated elements. That results in two
|
|
potential issues:
|
|
|
|
- We'll fail to free the elements at the end of the array. This is
|
|
only a problem if each element in the array also uses
|
|
dynamically-allocated memory (e.g. each element contains a string or
|
|
another array). Fortunately, there are only a few such structures in
|
|
any of our RPC-L definitions: SysNameList and CredInfos. And neither
|
|
of those are used in such a retry loop, so this isn't a problem.
|
|
|
|
- We'll give the wrong length to osi_free when freeing the array
|
|
itself. This only matters for KERNEL, and only on some platforms
|
|
(such as Solaris), since the length given to osi_free is ignored
|
|
everywhere else.
|
|
|
|
To avoid these possible issues, change the relevant retry loops to
|
|
free our xdr-allocated arrays on every iteration of the loop, like
|
|
this:
|
|
|
|
do {
|
|
xdr_free((xdrproc_t) xdr_foo, &array_out);
|
|
code = VL_SomeRPC(rxconn, &array_out);
|
|
} while (some_condition);
|
|
xdr_free((xdrproc_t) xdr_foo, &array_out);
|
|
|
|
Or like this:
|
|
|
|
do {
|
|
code = VL_SomeRPC(rxconn, &array_out);
|
|
xdr_free((xdrproc_t) xdr_foo, &array_out);
|
|
} while (some_condition);
|
|
|
|
FIXES 135043
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15923
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 1f5e1ef9e35f6b5e8693c91199c976d5e030c0d0)
|
|
|
|
Change-Id: I77ce3a904d502784cbf356e113972dfab838256e
|
|
Reviewed-on: https://gerrit.openafs.org/15945
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit a82212ab20f0635a40c52648a52a1e9eaccc4937
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Thu Oct 15 20:30:14 2020 -0500
|
|
|
|
OPENAFS-SA-2024-003: xdr: Ensure correct string length in xdr_string
|
|
|
|
CVE-2024-10397
|
|
|
|
Currently, if a caller calls an RPC with a string output argument,
|
|
like so:
|
|
|
|
{
|
|
char *str = NULL;
|
|
code = RXAFS_SomeCall(&str);
|
|
/* do something with 'str' */
|
|
xdr_free((xdrproc_t) xdr_string, &str);
|
|
}
|
|
|
|
Normally, xdr_free causes xdr_string to call osi_free, specifying the
|
|
same size that we allocated for the string. However, since we only
|
|
have a char*, the amount of space allocated for the string is not
|
|
recorded separately, and so xdr_string calculates the size of the
|
|
buffer to free by using strlen().
|
|
|
|
This works for well-formed strings, but if we fail to decode the
|
|
payload of the string, or if our peer gave us a string with a NUL byte
|
|
in the middle of it, then strlen() may be significantly less than the
|
|
actual allocated size. And so in this case, the size given to osi_free
|
|
will be wrong.
|
|
|
|
The size given to osi_free is ignored in userspace, and for KERNEL on
|
|
many platforms like Linux and DARWIN. However, it is notably not
|
|
ignored for KERNEL on Solaris and some other less supported platforms
|
|
(HPUX, Irix, NetBSD). At least on Solaris, an incorrect size given to
|
|
osi_free can cause a system panic or possibly memory corruption.
|
|
|
|
To avoid this, change xdr_string during XDR_DECODE to make sure that
|
|
strlen() of the string always reflects the allocated size. If we fail
|
|
to decode the string's payload, replace the payload with non-NUL bytes
|
|
(fill it with 'z', an arbitrary choice). And if we do successfully
|
|
decode the payload, check if the strlen() is wrong (that is, if the
|
|
payload contains NUL '\0' bytes), and fail if so, also filling the
|
|
payload with 'z'. This is only strictly needed in KERNEL on certain
|
|
platforms, but do it everywhere so our behavior is consistent.
|
|
|
|
FIXES 135043
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15922
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 7d0675e6c6a2f3200a3884fbe46b3ef8ef9ffd24)
|
|
|
|
Change-Id: Ieb8827474a7458ce80176b14ce87f3402aed7a86
|
|
Reviewed-on: https://gerrit.openafs.org/15944
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 0ff2cd9e0f5656e8327c5fe47935998de3669678
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Thu Oct 15 23:18:53 2020 -0500
|
|
|
|
OPENAFS-SA-2024-003: Check sanity on lengths of RPC returned arrays
|
|
|
|
CVE-2024-10397
|
|
|
|
Various RPCs return a variable-length array in an OUT argument, but
|
|
are only supposed to return specific sizes. A few instances of this
|
|
include the following (but this is not an exhaustive list):
|
|
|
|
- AFSVolListOneVolume should only return a single volintInfo.
|
|
|
|
- PR_NameToID should return the same number of IDs as names given.
|
|
|
|
- VL_GetAddrsU should return the same number of addresses as the
|
|
'nentries' OUT argument.
|
|
|
|
Some callers of these RPCs just assume that the server has not
|
|
violated these rules. If the server responds with a nonsensical array
|
|
size, this could cause us to read beyond the end of the array, or
|
|
cause a NULL dereference or other errors.
|
|
|
|
For example, some callers of VL_GetAddrsU will iterate over 'nentries'
|
|
addresses, even if the 'blkaddrs' OUT argument contains fewer entries.
|
|
Or with AFSVolListOneVolume, some callers assume that at least 1
|
|
volintInfo has been returned; if 0 have been returned, we can try to
|
|
access a NULL array.
|
|
|
|
To avoid all of this, add various sanity checks on the relevant
|
|
returned lengths of these RPCs. For most cases, if the lengths are not
|
|
sane, return an internal error from the appropriate subsystem (or
|
|
RXGEN_CC_UNMARSHAL if there isn't one). For VL_GetAddrsU, if
|
|
'nentries' is too long, just set it to the length of the returned
|
|
array.
|
|
|
|
FIXES 135043
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15921
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit c732715e4ee78ed1e2414c813ae5a4b3574107a0)
|
|
|
|
Change-Id: I2cfc0723f4c3a2692238fa1e59145aceee17e0d6
|
|
Reviewed-on: https://gerrit.openafs.org/15943
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit d253a52d3b59bd691eae8863ea2f06d99ad18550
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Sun Oct 4 23:04:06 2020 -0500
|
|
|
|
OPENAFS-SA-2024-003: xdr: Prevent XDR_DECODE buffer overruns
|
|
|
|
CVE-2024-10397
|
|
|
|
When making an RPC call from a client, output arguments that use
|
|
arrays (or array-like objects like strings and opaques) can be
|
|
allocated by XDR, like so:
|
|
|
|
{
|
|
struct idlist ids;
|
|
|
|
ids.idlist_val = NULL;
|
|
ids.idlist_len = 0;
|
|
code = PR_NameToID(rxconn, names, &ids);
|
|
/* data inside ids.idlist_val[...] */
|
|
xdr_free((xdrproc_t) xdr_idlist, &ids);
|
|
}
|
|
|
|
With this approach, during XDR_DECODE, xdr_array() reads in the number
|
|
of array elements from the peer, then allocates enough memory to hold
|
|
that many elements, and then reads in the array elements.
|
|
|
|
Alternatively, the caller can provide preallocated memory, like so:
|
|
|
|
{
|
|
struct idlist ids;
|
|
afs_int32 ids_buf[30];
|
|
|
|
ids.idlist_val = ids_buf;
|
|
ids.idlist_len = 30;
|
|
code = PR_NameToID(rxconn, names, &ids);
|
|
/* data inside ids.idlist_val[...] */
|
|
}
|
|
|
|
With this approach, during XDR_DECODE, xdr_array() reads in the number
|
|
of array elements from the peer, and then reads in the array elements
|
|
into the supplied buffer. However, in this case, xdr_array() never
|
|
checks that the number of array elements will actually fit into the
|
|
supplied buffer; the _len field provided by the caller is just ignored.
|
|
In this example, if the ptserver responds with 50 elements for the 'ids'
|
|
output argument, xdr_array() will write 50 afs_int32's into
|
|
'ids.idlist_val', going beyond the end of the 30 elements that are
|
|
actually allocated.
|
|
|
|
It's also possible, and in fact very easy, to use xdr-allocated
|
|
buffers and then reuse them as a preallocated buffer, possibly
|
|
accidentally. For example:
|
|
|
|
{
|
|
struct idlist ids;
|
|
|
|
ids.idlist_val = NULL;
|
|
ids.idlist_len = 0;
|
|
while (some_condition) {
|
|
code = PR_NameToID(rxconn, names, &ids);
|
|
}
|
|
}
|
|
|
|
In this case, the first call to PR_NameToID can cause the buffer for
|
|
'ids' to be allocated by XDR, which will then be reused by the
|
|
subsequent calls to PR_NameToId. Note that this can happen even if the
|
|
first PR_NameToID call fails; the call can be aborted after the output
|
|
array is allocated.
|
|
|
|
Retrying an RPC in this way is effectively what all ubik_Call*
|
|
codepaths do (including all ubik_* wrappers, e.g. ubik_PR_NameToID).
|
|
Or some callers retry effectively the same RPC when falling back to
|
|
earlier versions (e.g. VL_ListAttributesN2 -> VL_ListAttributesN).
|
|
|
|
To prevent this for arrays and opaques, change xdr_array (and
|
|
xdr_bytes) to check if the _len field for preallocated buffers is
|
|
large enough, and return failure if it's not.
|
|
|
|
Also perform the same check for the ka_CBS and ka_BBS structures. These
|
|
are mostly the same as opaques, but they have custom serialization
|
|
functions in src/kauth/kaaux.c. ka_BBS also has two lengths: the actual
|
|
length of bytes, and a 'max' length. ka_CBS isn't used for any RPC
|
|
output arguments, but fix it for consistency.
|
|
|
|
For strings, the situation is complicated by the fact that callers
|
|
cannot pass in how much space was allocated for the string, since
|
|
callers only provide a char**. So for strings, just refuse to use a
|
|
preallocated buffer at all, and return failure if one is provided.
|
|
|
|
Note that for some callers using preallocated arrays or strings, the
|
|
described buffer overruns are not possible, since the preallocated
|
|
buffers are larger than the max length specified in the relevant
|
|
RPC-L. For example, afs_DoBulkStat() allocates AFSCBMAX entries for
|
|
the output args for RXAFS_InlineBulkStatus, which is the max length
|
|
specified in the RPC-L, so a buffer overrun is impossible. But since
|
|
it is so easy to allow a buffer overrun, enforce the length checks for
|
|
everyone.
|
|
|
|
FIXES 135043
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15920
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 13413eceed80d106cbed5ffb91c4dfbc8cccf55c)
|
|
|
|
Change-Id: I1010d2fa309d4a441ebaf285168c2e7e887753b9
|
|
Reviewed-on: https://gerrit.openafs.org/15942
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit c18640c6b98b10cd6f78c63195ff822689cb5348
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Thu Jun 13 15:30:50 2024 -0500
|
|
|
|
OPENAFS-SA-2024-003: xdr: Set _len for prealloc'd opaque/array OUT args
|
|
|
|
CVE-2024-10397
|
|
|
|
Currently, a few RPCs with arrays or opaque OUT arguments are called
|
|
with preallocated memory for the arg, but also provide a _len of 0 (or
|
|
an uninitialized _len). This makes it impossible for the xdr routine to
|
|
tell whether we have allocated enough space to actually hold the
|
|
response from the server.
|
|
|
|
To help this situation, either specify an appropriate _len for the
|
|
preallocated value (cm_IoctlGetACL, fsprobe_LWP), or don't provide a
|
|
preallocated buffer at all and let xdr allocate a buffer for us
|
|
(PGetAcl).
|
|
|
|
Note that this commit doesn't change xdr to actually check the value of
|
|
the given _len; but now a future commit can do so without breaking
|
|
callers.
|
|
|
|
FIXES 135043
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15919
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit b2b1110ddd9e19670dbc6a3217dc2a74af432f82)
|
|
|
|
Change-Id: Ibdee49b79da1476c4e606bcad5fb3d08eb259ad7
|
|
Reviewed-on: https://gerrit.openafs.org/15941
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 40440c3eb628ff1772588bdc99d7496292097bbd
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Thu Jun 13 15:28:38 2024 -0500
|
|
|
|
OPENAFS-SA-2024-003: xdr: Avoid prealloc'd string OUT args
|
|
|
|
CVE-2024-10397
|
|
|
|
Currently, several callers call RPCs with string OUT arguments, and
|
|
provide preallocated memory for those arguments. This can easily allow a
|
|
response from the server to overrun the allocated buffer, stomping over
|
|
stack or heap memory.
|
|
|
|
We could simply make our preallocated buffers larger than the maximum
|
|
size that the RPC allows, but relying on that is error prone, and
|
|
there's no way for XDR to check if a string buffer is large enough.
|
|
|
|
Instead, to make sure we don't overrun a given preallocated buffer,
|
|
avoid giving a preallocated buffer to such RPCs, and let XDR allocate
|
|
the memory for us.
|
|
|
|
Specifically, this commit changes several callers to
|
|
RXAFS_GetVolumeStatus(), and one caller of BOZO_GetInstanceParm(), to
|
|
avoid passing in a preallocated string buffer.
|
|
|
|
All other callers of RPCs with string OUT args already let XDR allocate
|
|
the buffers for them.
|
|
|
|
FIXES 135043
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15918
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 00a1b266af51a828a022c23e7bb006a39740eaad)
|
|
|
|
Change-Id: Ib174d008eaf1fd10d42702bcdb607e45b26acf58
|
|
Reviewed-on: https://gerrit.openafs.org/15940
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit fec84e347768080e4370e5aeb05886bfe19ae54b
|
|
Author: Michael Meffie <mmeffie@sinenomine.net>
|
|
Date: Fri Mar 10 17:51:17 2023 -0500
|
|
|
|
xdr: Avoid xdr_string maxsize check when freeing
|
|
|
|
The maxsize argument in xdr_string() is garbage when called by
|
|
xdr_free(), since xdr_free() only passes the XDR handle and the xdr
|
|
string to be freed. Sometimes the size check fails and xdr_string()
|
|
returns early, without freeing the string and without setting the object
|
|
pointer to NULL.
|
|
|
|
Usually this just results in leaking the string's memory. But since
|
|
commit 9ae5b599c7 (bos: Let xdr allocate rpc output strings), many
|
|
callers in bos.c rely on xdr_free(xdr_string) to set the given string
|
|
to NULL; if this doesn't happen, subsequent calls to BOZO_ RPCs can
|
|
corrupt memory, often causing the 'bos' process to segfault.
|
|
|
|
We only need the maxsize check when encoding or decoding, so avoid
|
|
accessing the maxsize agument when the op mode is XDR_FREE.
|
|
|
|
In general, xdr_free() can only safely be used on xdr 2-argument xdr
|
|
functions, so must be avoided when freeing xdr opaque, byte, and union
|
|
types.
|
|
|
|
This change makes it safe to use xdr_free() to free xdr strings, but in
|
|
the future, we should provide a typesafe and less fragile function for
|
|
freeing xdr strings returned from RPCs. Currently, xdr_free(xdr_string)
|
|
is only called by the bos client and the tests.
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15343
|
|
Tested-by: BuildBot <buildbot@rampaginggeek.com>
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit bbb1e8adfed6804ac6fbae0a073dc6927096e16a)
|
|
|
|
Change-Id: I1f190d28acab5fa1621919f283571fcacb495ce4
|
|
Reviewed-on: https://gerrit.openafs.org/15939
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 21941c0ab2d28fa3a074f46e4d448d518a7c1b8a
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Tue Nov 5 23:40:24 2024 -0600
|
|
|
|
OPENAFS-SA-2024-002: Avoid uninitialized memory when parsing ACLs
|
|
|
|
CVE-2024-10396
|
|
|
|
Several places in the tree parse ACLs using sscanf() calls that look
|
|
similar to this:
|
|
|
|
sscanf(str, "%d dfs:%d %s", &nplus, &dfs, cell);
|
|
sscanf(str, "%100s %d", tname, &trights);
|
|
|
|
Some callers check whether the scanf() returns negative or 0, but some
|
|
callers do not check the return code at all. If only some of the fields
|
|
are present in the sscanf()'d string (because, for instance, the ACL is
|
|
malformed), some of the arguments are left alone, and may be set to
|
|
garbage if the relevant variable was never initialized.
|
|
|
|
If the parsed ACL is copied to another ACL, this can result in the
|
|
copied ACL containing uninitialized memory.
|
|
|
|
To avoid this, make sure all of the variables passed to sscanf() and
|
|
similar calls are initialized before parsing. This commit does not
|
|
guarantee that the results make sense, but at least the results do not
|
|
contain uninitialized memory.
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15917
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit ac602a0a5624b0f0ab04df86f618d09f2a4ad063)
|
|
|
|
Change-Id: I00245c12993683eb3b58d51cf77742f758bac120
|
|
Reviewed-on: https://gerrit.openafs.org/15938
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit a9ede52673b8c8abbfc2577ac6987a8a5686206f
|
|
Author: Benjamin Kaduk <kaduk@mit.edu>
|
|
Date: Mon Nov 4 20:50:50 2024 -0800
|
|
|
|
OPENAFS-SA-2024-002: make VIOCGETAL consumers stay within string bounds
|
|
|
|
CVE-2024-10396
|
|
|
|
After the preceding commits, the data returned by the VIOCGETAL
|
|
pioctl (a RXAFS_FetchAcl wrapper) will safely be NUL-terminated.
|
|
However, the callers that attempt to parse the ACL string make
|
|
assumptions that the returned data will be properly formatted,
|
|
and implement a "skip to next line" functionality (under various
|
|
names) that blindly increments a char* until it finds a newline
|
|
character, which can read past the end of even a properly
|
|
NUL-terminated string if there is not a newline where one is
|
|
expected.
|
|
|
|
Adjust the various "skip to next line" functionality to keep
|
|
the current string pointer at the trailing NUL if the end of the
|
|
string is reached while searching for a newline.
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15916
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit a4ecb050540528a1bff840ff08d21f99e6ef3fbf)
|
|
|
|
Change-Id: Id2d8c0164cfaa7d03a9e37b29ff58b88cf815483
|
|
Reviewed-on: https://gerrit.openafs.org/15937
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit a96a3160f5425125588f39f5ac612df3ef9b9a8a
|
|
Author: Benjamin Kaduk <kaduk@mit.edu>
|
|
Date: Mon Nov 4 20:50:50 2024 -0800
|
|
|
|
OPENAFS-SA-2024-002: verify FetchACL returned only a string
|
|
|
|
CVE-2024-10396
|
|
|
|
Supplement the previous commit by additionally verifying that
|
|
the returned ACL string occupies the entire XDR opaque, rejecting
|
|
any values returned that have an internal NUL prior to the end
|
|
of the opaque.
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15915
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 7e13414e8ea995d438cde3e60988225f3ab4cbcd)
|
|
|
|
Change-Id: I107f89e3d8a5c3c5cd67f6296742bfca7cace0e1
|
|
Reviewed-on: https://gerrit.openafs.org/15936
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 64068705b15661a8d4e0b9f9f2ad4aec34ed51a7
|
|
Author: Benjamin Kaduk <kaduk@mit.edu>
|
|
Date: Mon Nov 4 20:33:16 2024 -0800
|
|
|
|
OPENAFS-SA-2024-002: verify FetchACL returned a valid string
|
|
|
|
CVE-2024-10396
|
|
|
|
Analogously to how a call to RXAFS_StoreACL() with a malformed
|
|
ACL string can cause a fileserver to perform invalid memory operations,
|
|
a malformed ACL string returned in response to a call to RXAFS_FetchACL()
|
|
can cause a client to perform invalid memory operations.
|
|
|
|
Modify all the in-tree callers of the RPC to verify that the ACL
|
|
data, which is conveyed as an XDR 'opaque' but whose contents
|
|
are actually expected to be a string, is a valid C string. If
|
|
a zero-length opaque or one without a trailing NUL is received,
|
|
treat that as an error response from the fileserver rather than
|
|
returning success.
|
|
|
|
The Unix cache manager's pioctl handler already has logic to cope with a
|
|
zero-length reply by emitting a single NUL byte to userspace. This
|
|
special-casing seems to have been in place from the original IBM import,
|
|
though it does so by confusingly "skipping over" a NUL byte already put
|
|
in place. For historical compatibility, preserve that behavior rather
|
|
than treating the zero-length reply as an error as we do for the other
|
|
callers. It seems likely that this location should treat a zero-length
|
|
reply as an error just as the other call sites do, but that can be done
|
|
as a later change.
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15914
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 0b1ccb0dbc3b7673558eceff3d672971f5bb0197)
|
|
|
|
Change-Id: Ifbce762d76641f08b5fc5e79b4c8dad07c1a135a
|
|
Reviewed-on: https://gerrit.openafs.org/15935
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit bb01d76a2095baa65880bdc5d504e7a198958265
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Wed Aug 21 00:41:49 2024 -0500
|
|
|
|
OPENAFS-SA-2024-002: viced: Avoid unchecked ACL in StoreACL audit log
|
|
|
|
CVE-2024-10396
|
|
|
|
Currently in SRXAFS_StoreACL, if CallPreamble() or check_acl() fail, we
|
|
will jump to Bad_StoreACL, which will pass the ACL string from the
|
|
client to osi_auditU. Since check_acl() hasn't yet checked if the given
|
|
ACL contains a NUL byte, the ACL may be an unterminated string. If
|
|
auditing is enabled, this can cause garbage to be logged to the audit
|
|
log, or cause the fileserver to crash.
|
|
|
|
To avoid this, set 'rawACL' to NULL at first, only setting it to the
|
|
actual ACL string after check_acl() has succeeded. This ensures that all
|
|
code accessing 'rawACL' is guaranteed to be using a terminated string.
|
|
|
|
This may mean that we pass a NULL AUD_ACL to osi_auditU. Our auditing
|
|
code explicitly checks for and handles handles NULL strings, so this is
|
|
fine.
|
|
|
|
FIXES 135445
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15913
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit c9eae1e8b26144063e5d1db23d47ee82c4b9ef3a)
|
|
|
|
Change-Id: Ieda6f910d875c4b5179011e5e93e5694d3f4ce47
|
|
Reviewed-on: https://gerrit.openafs.org/15934
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit ee020f7cba7d82bc3d4b468210b5052af53c5db5
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Wed Aug 21 00:29:34 2024 -0500
|
|
|
|
OPENAFS-SA-2024-002: viced: Introduce 'rawACL' in StoreACL
|
|
|
|
CVE-2024-10396
|
|
|
|
Change our StoreACL implementation to refer to the 'AccessList' argument
|
|
via a new local variable called 'rawACL'. This makes it clearer to
|
|
users that the data is a string, and makes it easier for future commits
|
|
to make sure we don't access the 'AccessList' argument in certain
|
|
situations.
|
|
|
|
Update almost all users in StoreACL to refer to 'rawACL' instead of
|
|
'AccessList'. Change the name of 'AccessList' to 'uncheckedACL' to make
|
|
sure we don't miss any users. Update our check_acl() call to use
|
|
'uncheckedACL' (and not 'rawACL'), because it must use an AFSOpaque to
|
|
check the ACL.
|
|
|
|
Change RXStore_AccessList() and printableACL() to accept a plain char*
|
|
instead of a struct AFSOpaque.
|
|
|
|
This commit should not incur any noticeable behavior change. Technically
|
|
printableACL() is changed to run strlen() on the given string, but this
|
|
should not cause any noticeable change in behavior:
|
|
|
|
This change could cause printableACL() to process less of the string
|
|
than before, if the string contains a NUL byte before the end of the
|
|
AFSOpaque buffer. But this doesn't matter, since the all of our code
|
|
after this treats the ACL as a plain string, and so doesn't look at any
|
|
data beyond the first NUL. It's not possible for printableACL() to
|
|
process more data than before, because check_acl() has already checked
|
|
that the ACL string contains a NUL byte, so we must process
|
|
AFSOpaque_len bytes or fewer.
|
|
|
|
FIXES 135445
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15912
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit eb8b93a971c6293cdfbf8cd3d9a6351a8cb76f81)
|
|
|
|
[1.8: printableACL() does not exist in this branch.]
|
|
|
|
Change-Id: I65b518acab26be0bb1854c29e46c90e5fee52d41
|
|
Reviewed-on: https://gerrit.openafs.org/15933
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit d66caf8c04878724001839317637445708edef2c
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Tue Sep 19 15:55:42 2023 -0500
|
|
|
|
OPENAFS-SA-2024-002: acl: Error on missing newlines when parsing ACL
|
|
|
|
CVE-2024-10396
|
|
|
|
In acl_Internalize_pr(), each line in an ACL granting rights (positive
|
|
or negative) is sscanf()'d with "%63s\t%d\n", and then we try to
|
|
advance 'nextc' beyond the next newline character.
|
|
|
|
However, sscanf()'ing "%63s\t%d\n" does not guarantee that there is a
|
|
newline in the given string. Whitespace characters in sscanf() are not
|
|
matched exactly, and may match any amount of whitespace (including
|
|
none at all). For example, a string like "foo 4" may be parsed by
|
|
sscanf(), but does not contain any newlines.
|
|
|
|
If this happens, strchr(nextc, '\n') will return NULL, and we'll
|
|
advance 'nextc' to 0x1, causing a segfault when we next try to
|
|
dereference 'nextc'.
|
|
|
|
To avoid this, check if 'nextc' is NULL after the strchr() call, and
|
|
return an error if so.
|
|
|
|
FIXES 135445
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15911
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 96ab2c6f8a614d597a523b45871c5f64a50a7040)
|
|
|
|
Change-Id: I666dfb2c401410865c1f98d9db1b342b52c8f628
|
|
Reviewed-on: https://gerrit.openafs.org/15932
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 1e6e813188ecce62eb7af19385d911f63469bdb6
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Tue Sep 19 15:44:08 2023 -0500
|
|
|
|
OPENAFS-SA-2024-002: acl: Do not parse beyond end of ACL
|
|
|
|
CVE-2024-10396
|
|
|
|
The early parsing code in acl_Internalize_pr() tries to advance
|
|
'nextc' to go beyond the first two newlines in the given ACL string.
|
|
But if the given ACL string has no newlines, or only 1 newline, then
|
|
'nextc' will point beyond the end of the ACL string, potentially
|
|
pointing to garbage.
|
|
|
|
Intuitively, it may look like the ACL string must contain at least 2
|
|
newlines because we have sscanf()'d the string with "%d\n%\d".
|
|
However, whitespace characters in sscanf() are not matched exactly
|
|
like non-whitespace characters are; a sequence of whitespace
|
|
characters matches any amount of whitespace (including none). So, a
|
|
string like "1 2" will be parsed by "%d\n%d\n", but will not contain
|
|
any newline characters.
|
|
|
|
Usually this should result in a parse error from acl_Internalize_pr(),
|
|
but if the garbage happens to parse successfully, this could result in
|
|
unrelated memory getting stored to the ACL.
|
|
|
|
To fix this, don't advance 'nextc' if we're already at the end of the
|
|
ACL string.
|
|
|
|
FIXES 135445
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15910
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 35d218c1d17973c1412ea5dff1e23d9aae50c4c7)
|
|
|
|
Change-Id: I7a7d136676e548adba5fa8d0003b5f8342332a86
|
|
Reviewed-on: https://gerrit.openafs.org/15931
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit a07e50726df09c49dfe7b953c3e49eb98f310c09
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Mon Sep 18 16:14:07 2023 -0500
|
|
|
|
OPENAFS-SA-2024-002: viced: Free ACL on acl_Internalize_pr error
|
|
|
|
CVE-2024-10396
|
|
|
|
Currently, we don't free 'newACL' if acl_Internalize_pr() fails. If
|
|
acl_Internalize_pr() has already allocated 'newACL', then the memory
|
|
associated with newACL will be leaked. This can happen if parsing the
|
|
given ACL fails at any point after successfully parsing the first
|
|
couple of lines in the ACL.
|
|
|
|
Change acl_FreeACL() to make freeing a NULL acl a no-op, to make it
|
|
easier to make sure the acl has been freed.
|
|
|
|
FIXES 135445
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15909
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit f4dfc2d7183f126bc4a45b5cabc78c3de020925f)
|
|
|
|
Change-Id: If1554aa899542761ec6e6611394f2ee4f9379f22
|
|
Reviewed-on: https://gerrit.openafs.org/15930
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit f74f960a18f559e683d6a1f5104e43c3ca93ecb8
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Mon Sep 18 16:13:57 2023 -0500
|
|
|
|
OPENAFS-SA-2024-002: viced: Refuse ACLs without '\0' in SRXAFS_StoreACL
|
|
|
|
CVE-2024-10396
|
|
|
|
Currently, the fileserver treats the ACL given in RXAFS_StoreACL as a
|
|
string, even though it is technically an AFSOpaque and could be not
|
|
NUL-terminated.
|
|
|
|
We give the ACL opaque/string to acl_Internalize_pr() to parse, which
|
|
will run off the end of the allocated buffer if the given ACL does not
|
|
contain a '\0' character. Usually this will result in a parse error
|
|
since we'll encounter garbage, but if the partially-garbage ACL
|
|
happens to parse successfully, some uninitialized data could make it
|
|
into the stored ACL.
|
|
|
|
In addition, if the given ACL is an opaque of length 0, we'll still
|
|
give the opaque pointer to acl_Internalize_pr(). In this case, the
|
|
pointer will point to &memZero, which happens to contain a NUL byte,
|
|
and so is treated like an empty string (which is not a valid ACL). But
|
|
the fact that this causes no problems is somewhat a coincidence, and
|
|
so should also be avoided.
|
|
|
|
To avoid both of these situations, just check if the given ACL string
|
|
contains a NUL byte. If it doesn't, or if it has length 0, refuse to
|
|
look at it and abort the call with EINVAL.
|
|
|
|
FIXES 135445
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15908
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit e15decb318797f1d471588dc669c3e3b26f1b8b3)
|
|
|
|
Change-Id: I0f447310db5a988b21e19bb5158bb564d4ea3d94
|
|
Reviewed-on: https://gerrit.openafs.org/15929
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 57b655e4837d8660ebcc25d95efb09118adaff07
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Fri Jan 10 12:40:15 2020 -0600
|
|
|
|
OPENAFS-SA-2024-001: afs: Throttle PAG creation in afs_genpag()
|
|
|
|
CVE-2024-10394
|
|
|
|
Currently, we only throttle PAG creation in afs_setpag(). But there
|
|
are several callers that call setpag() directly, not via afs_setpag;
|
|
notably _settok_setParentPag in afs_pioctl.c. When setpag() is called
|
|
with a PAG value of -1, it generates a new PAG internally without any
|
|
throttling. So, those callers effectively bypass the PAG throttling
|
|
mechanism, which allows a calling user to create PAGs without any
|
|
delay.
|
|
|
|
To avoid this, move our afs_pag_wait call from afs_setpag() to
|
|
afs_genpag(), which all code uses to generate a new PAG value. This
|
|
ensures that PAG creation is always throttled for unprivileged users.
|
|
|
|
FIXES 135062
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/15907
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit 0358648dbed7656e7bda30f6f0ea6e8e01bf6527)
|
|
|
|
Change-Id: I7f8f475a913c6f62ca2c7a6fb00239e51a8a8c62
|
|
Reviewed-on: https://gerrit.openafs.org/15928
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
|
|
commit 20c22347b41eea2ebbdc0ab15f16c822af44df51
|
|
Author: Andrew Deason <adeason@sinenomine.net>
|
|
Date: Fri Jan 10 12:01:50 2020 -0600
|
|
|
|
OPENAFS-SA-2024-001: afs: Introduce afs_genpag()
|
|
|
|
CVE-2024-10394
|
|
|
|
Currently, several areas in the code call genpag() to generate a new
|
|
PAG id, but the signature of genpag() is very limited. To allow for
|
|
the code in genpag() to return errors and to examine the calling
|
|
user's credentials, introduce a new function, afs_genpag(), that does
|
|
the same thing as genpag(), but accepts creds and allows errors to be
|
|
returned.
|
|
|
|
Convert all existing callers to use afs_genpag() and to handle any
|
|
errors, though no errors are ever returned in this commit on its own.
|
|
|
|
To ensure there are no old callers of genpag() left around, change the
|
|
existing genpag() to be called genpagval(), and declare it static.
|
|
|
|
FIXES 135062
|
|
|
|
Reviewed-on: https://gerrit.openafs.org/14090
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
(cherry picked from commit f701f704c7bc93cf5fd7cffaaa043cef6a99e77f)
|
|
|
|
Change-Id: I675d6cb111ca74638a3b856a3c989dcb2fe6d534
|
|
Reviewed-on: https://gerrit.openafs.org/15927
|
|
Reviewed-by: Benjamin Kaduk <kaduk@mit.edu>
|
|
Tested-by: Benjamin Kaduk <kaduk@mit.edu>
|