• R/O
  • HTTP
  • SSH
  • HTTPS

提交

标签
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

Commit MetaInfo

修订版085cbdafca9c3d7bc2f27523a343f61db82f2ccb (tree)
时间2022-07-19 00:21:49
作者Heinrich Schuchardt <heinrich.schuchardt@cano...>
CommiterHeinrich Schuchardt

Log Message

pxe: simplify label_boot()

Coverity CID 131256 indicates a possible buffer overflow in label_boot().
This would only occur if the size of the downloaded file would exceed 4
GiB. But anyway we can simplify the code by using snprintf() and checking
the return value.

Addresses-Coverity-ID: 131256 ("Security best practices violations (STRING_OVERFLOW)")
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Reviewed-by: Artem Lapkin <email2tema@gmail.com>

更改概述

差异

--- a/boot/pxe_utils.c
+++ b/boot/pxe_utils.c
@@ -532,11 +532,10 @@ static int label_boot(struct pxe_context *ctx, struct pxe_label *label)
532532 }
533533
534534 initrd_addr_str = env_get("ramdisk_addr_r");
535- strcpy(initrd_filesize, simple_xtoa(size));
536-
537- strncpy(initrd_str, initrd_addr_str, 18);
538- strcat(initrd_str, ":");
539- strncat(initrd_str, initrd_filesize, 9);
535+ size = snprintf(initrd_str, sizeof(initrd_str), "%s:%lx",
536+ initrd_addr_str, size);
537+ if (size >= sizeof(initrd_str))
538+ return 1;
540539 }
541540
542541 if (get_relfile_envaddr(ctx, label->kernel, "kernel_addr_r",