← Bilinen Hatalar

yescrypt Desteği Eklendi: Unutulan Dosyalar + 64-bit'te Derlenmeyen Kod

BusyBox Derleme Hatası 41 commit etkilendi 2025-07-06 → 2025-07-07

Ne Oldu ve Neden

Denys Vlasenko, libxcrypt projesinden uyarlanarak modern yescrypt parola özetleme algoritmasını BusyBox'a ekledi. Bu, bir günde bitecek küçük bir yama değil — 40'tan fazla commit süren, canlı canlı geliştirilen büyük bir özellikti ve bu süre boyunca ana geliştirme dalı (git history) neredeyse hiç build edilemedi. İki ayrı, art arda gelen gerçek hata söz konusu:

1) Unutulan kaynak dosyaları. İlk commit, libbb/pw_encrypt.c içine #include "pw_encrypt_yes.c" satırı ekledi ama pw_encrypt_yes.c dosyasının kendisini commit'e eklemeyi unuttu — derleyici anında fatal error: pw_encrypt_yes.c: No such file or directory ile duruyordu. Denys bunu kendisi de fark etti: bir gün sonra art arda iki "forgotten source file" commit'i attı (a2a5db41a ile pw_ascii64.c, ardından e2091c984 ile hash_sha256_block.c ve nihayet asıl eksik olan pw_encrypt_yes.c).

2) 64-bit'te derlenmeyen kod. Eksik dosyalar tamamlanınca bu sefer libbb/yescrypt/alg-yescrypt-kdf.c içindeki yescrypt_kdf32_body() fonksiyonunda error: 'buflen' undeclared hatası çıktı — #if SIZE_MAX > UINT32_MAX bloğu fonksiyonun hiçbir yerinde tanımlanmamış bir buflen değişkenine referans veriyordu (muhtemelen refactor sırasında kalan bir artık). Bu blok sadece SIZE_MAX'ın 32 biti aştığı — yani 64-bit — sistemlerde derlenmeye çalışıldığı için hata sadece 64-bit build'lerde ortaya çıkıyordu, ki bizim build ortamımız tam olarak budur.

Denys Vlasenko
Hatayı açan commit: Denys Vlasenko
@vda-linux · 2025-07-06
80e676664 — libbb: add yescrypt password hashing support

Nasıl Düzeltildi

7 Temmuz 2025, saat 21:52'de ("libbb/yescrypt: 64-bit build fixes" commit'inde) Denys sorunlu #if SIZE_MAX > UINT32_MAX bloğunu tamamen kaldırdı, r ve p değişkenlerini fonksiyonun başında düzgün bildirdi ve gereksiz iç blok parantezlerini temizledi. Bu commit'ten itibaren yescrypt kodu 64-bit sistemlerde de sorunsuz derleniyor.

Denys Vlasenko
Düzelten commit: Denys Vlasenko
@vda-linux · 2025-07-07
e5d3a8763 — libbb/yescrypt: 64-bit build fixes

Düzeltmenin Diff'i

Aşağıda düzeltme commit'inin gerçek diff'i var — dosya dosya gezinebilirsin.

libbb/yescrypt/alg-yescrypt-kdf.c+4 -8
@@ -823,6 +823,7 @@ static int yescrypt_kdf32_body(
salsa20_blk_t *V, *XY;
uint8_t sha256[32];
uint8_t dk[sizeof(sha256)], *dkp = buf32;
+ uint32_t r, p;
/* Sanity-check parameters */
switch (flags___YESCRYPT_MODE_MASK) {
@@ -849,13 +850,9 @@ static int yescrypt_kdf32_body(
default:
goto out_EINVAL;
}
-#if SIZE_MAX > UINT32_MAX
- if (buflen > (((uint64_t)1 << 32) - 1) * 32)
- goto out_EINVAL;
-#endif
- {
- const uint32_t r = YCTX_param_r;
- const uint32_t p = YCTX_param_p;
+
+ r = YCTX_param_r;
+ p = YCTX_param_p;
if ((uint64_t)r * (uint64_t)p >= 1 << 30)
goto out_EINVAL;
if (N > UINT32_MAX)
@@ -982,7 +979,6 @@ static int yescrypt_kdf32_body(
out_EINVAL:
errno = EINVAL;
return -1;
- }
}
/**

Etkilenen Commit'lerden Örnekler