← Commit list

bf8231d11

Denys Vlasenko
Denys Vlasenko
2025-07-06
SOURCE BUG Duration: 108s

Subject

libbb/yescrypt: remove YESCRYPT_INIT_SHARED flag and code using it

SOURCE BUG

This commit was genuinely broken at the time (not related to our build system): libbb/yescrypt eklenirken (2025-07-06 - 2025-07-07 arasi) once unutulan kaynak dosyalari (pw_encrypt_yes.c, hash_sha256_block.c, pw_ascii64.c), ardindan 64-bit'te derlenmeyen bir 'buflen' degiskeni (alg-yescrypt-kdf.c) vardi - busybox'in kendi kodundaki gercek hatalar (e5d3a8763 ile duzeltildi)

→ Bu hatanin tam hikayesini ve duzeltme diffini gor

Binary

No binary (build failed)

Architecture & Compiler Flags

Architecture: x86_64-linux-gnu Compiler: gcc (Ubuntu 11.4.0-1ubuntu1~22.04.3) 11.4.0

—

Build Log

(log yok)

Commit Diff GitHub →

libbb/yescrypt/alg-yescrypt-kdf.c+12 -34
@@ -731,9 +731,7 @@ static void smix(uint8_t *B, size_t r, uint32_t N, uint32_t p, uint32_t t,
}
Nloop_rw = 0;
- if (flags & YESCRYPT_INIT_SHARED)
- Nloop_rw = Nloop_all;
- else if (flags & YESCRYPT_RW)
+ if (flags & YESCRYPT_RW)
Nloop_rw = Nloop_all / p;
Nchunk &= ~(uint32_t)1; /* round down to even */
@@ -872,19 +870,6 @@ static int yescrypt_kdf_body(
V = NULL;
V_size = (size_t)128 * r * N;
need = V_size;
- if (flags & YESCRYPT_INIT_SHARED) {
- if (local->aligned_size < need) {
- if (local->base || local->aligned ||
- local->base_size || local->aligned_size)
- goto out_EINVAL;
- if (!alloc_region(local, need))
- return -1;
- }
- if (flags & YESCRYPT_ALLOC_ONLY)
- return -2; /* expected "failure" */
- V = (salsa20_blk_t *)local->aligned;
- need = 0;
- }
B_size = (size_t)128 * r * p;
need += B_size;
if (need < B_size)
@@ -899,25 +884,18 @@ static int yescrypt_kdf_body(
if (need < S_size)
goto out_EINVAL;
}
- if (flags & YESCRYPT_INIT_SHARED) {
- if (!alloc_region(&tmp, need))
+ init_region(&tmp);
+ if (local->aligned_size < need) {
+ if (free_region(local))
+ return -1;
+ if (!alloc_region(local, need))
return -1;
- B = (uint8_t *)tmp.aligned;
- XY = (salsa20_blk_t *)((uint8_t *)B + B_size);
- } else {
- init_region(&tmp);
- if (local->aligned_size < need) {
- if (free_region(local))
- return -1;
- if (!alloc_region(local, need))
- return -1;
- }
- if (flags & YESCRYPT_ALLOC_ONLY)
- return -3; /* expected "failure" */
- B = (uint8_t *)local->aligned;
- V = (salsa20_blk_t *)((uint8_t *)B + B_size);
- XY = (salsa20_blk_t *)((uint8_t *)V + V_size);
}
+ if (flags & YESCRYPT_ALLOC_ONLY)
+ return -3; /* expected "failure" */
+ B = (uint8_t *)local->aligned;
+ V = (salsa20_blk_t *)((uint8_t *)B + B_size);
+ XY = (salsa20_blk_t *)((uint8_t *)V + V_size);
S = NULL;
if (flags & YESCRYPT_RW)
S = (uint8_t *)XY + XY_size;
@@ -1021,7 +999,7 @@ int yescrypt_kdf(
return -1;
}
- if ((flags & (YESCRYPT_RW | YESCRYPT_INIT_SHARED)) == YESCRYPT_RW
+ if ((flags & YESCRYPT_RW)
&& p >= 1
&& N / p >= 0x100
&& N / p * r >= 0x20000
libbb/yescrypt/alg-yescrypt.h+1 -2
@@ -83,7 +83,6 @@ typedef uint32_t yescrypt_flags_t;
/* Private */
#define YESCRYPT_MODE_MASK 0x003
#define YESCRYPT_RW_FLAVOR_MASK 0x3fc
-#define YESCRYPT_INIT_SHARED 0x01000000
#define YESCRYPT_ALLOC_ONLY 0x08000000
#define YESCRYPT_PREHASH 0x10000000
#endif
@@ -98,7 +97,7 @@ typedef uint32_t yescrypt_flags_t;
#ifdef YESCRYPT_INTERNAL
#define YESCRYPT_KNOWN_FLAGS \
(YESCRYPT_MODE_MASK | YESCRYPT_RW_FLAVOR_MASK | \
- YESCRYPT_INIT_SHARED | YESCRYPT_ALLOC_ONLY | YESCRYPT_PREHASH)
+ YESCRYPT_ALLOC_ONLY | YESCRYPT_PREHASH)
#endif
/**