0005-calloc-Use-calloc-at-most-places.patch 72 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840
  1. From 8185711241d73931269f402bb6799f7e2c58f04b Mon Sep 17 00:00:00 2001
  2. From: Peter Jones <pjones@redhat.com>
  3. Date: Mon, 15 Jun 2020 12:26:01 -0400
  4. Subject: [PATCH] calloc: Use calloc() at most places
  5. MIME-Version: 1.0
  6. Content-Type: text/plain; charset=UTF-8
  7. Content-Transfer-Encoding: 8bit
  8. This modifies most of the places we do some form of:
  9. X = malloc(Y * Z);
  10. to use calloc(Y, Z) instead.
  11. Among other issues, this fixes:
  12. - allocation of integer overflow in grub_png_decode_image_header()
  13. reported by Chris Coulson,
  14. - allocation of integer overflow in luks_recover_key()
  15. reported by Chris Coulson,
  16. - allocation of integer overflow in grub_lvm_detect()
  17. reported by Chris Coulson.
  18. Fixes: CVE-2020-14308
  19. Signed-off-by: Peter Jones <pjones@redhat.com>
  20. Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
  21. Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com>
  22. ---
  23. grub-core/bus/usb/usbhub.c | 8 ++++----
  24. grub-core/commands/efi/lsefisystab.c | 3 ++-
  25. grub-core/commands/legacycfg.c | 6 +++---
  26. grub-core/commands/menuentry.c | 2 +-
  27. grub-core/commands/nativedisk.c | 2 +-
  28. grub-core/commands/parttool.c | 12 +++++++++---
  29. grub-core/commands/regexp.c | 2 +-
  30. grub-core/commands/search_wrap.c | 2 +-
  31. grub-core/disk/diskfilter.c | 4 ++--
  32. grub-core/disk/ieee1275/ofdisk.c | 2 +-
  33. grub-core/disk/ldm.c | 14 +++++++-------
  34. grub-core/disk/luks.c | 2 +-
  35. grub-core/disk/lvm.c | 8 ++++----
  36. grub-core/disk/xen/xendisk.c | 2 +-
  37. grub-core/efiemu/loadcore.c | 2 +-
  38. grub-core/efiemu/mm.c | 6 +++---
  39. grub-core/font/font.c | 3 +--
  40. grub-core/fs/affs.c | 6 +++---
  41. grub-core/fs/btrfs.c | 6 +++---
  42. grub-core/fs/hfs.c | 2 +-
  43. grub-core/fs/hfsplus.c | 6 +++---
  44. grub-core/fs/iso9660.c | 2 +-
  45. grub-core/fs/ntfs.c | 4 ++--
  46. grub-core/fs/sfs.c | 2 +-
  47. grub-core/fs/tar.c | 2 +-
  48. grub-core/fs/udf.c | 4 ++--
  49. grub-core/fs/zfs/zfs.c | 4 ++--
  50. grub-core/gfxmenu/gui_string_util.c | 2 +-
  51. grub-core/gfxmenu/widget-box.c | 4 ++--
  52. grub-core/io/gzio.c | 2 +-
  53. grub-core/kern/efi/efi.c | 6 +++---
  54. grub-core/kern/emu/hostdisk.c | 2 +-
  55. grub-core/kern/fs.c | 2 +-
  56. grub-core/kern/misc.c | 2 +-
  57. grub-core/kern/parser.c | 2 +-
  58. grub-core/kern/uboot/uboot.c | 2 +-
  59. grub-core/lib/libgcrypt/cipher/ac.c | 8 ++++----
  60. grub-core/lib/libgcrypt/cipher/primegen.c | 4 ++--
  61. grub-core/lib/libgcrypt/cipher/pubkey.c | 4 ++--
  62. grub-core/lib/priority_queue.c | 2 +-
  63. grub-core/lib/reed_solomon.c | 7 +++----
  64. grub-core/lib/relocator.c | 10 +++++-----
  65. grub-core/lib/zstd/fse_decompress.c | 2 +-
  66. grub-core/loader/arm/linux.c | 2 +-
  67. grub-core/loader/efi/chainloader.c | 2 +-
  68. grub-core/loader/i386/bsdXX.c | 2 +-
  69. grub-core/loader/i386/xnu.c | 4 ++--
  70. grub-core/loader/macho.c | 2 +-
  71. grub-core/loader/multiboot_elfxx.c | 2 +-
  72. grub-core/loader/xnu.c | 2 +-
  73. grub-core/mmap/mmap.c | 4 ++--
  74. grub-core/net/bootp.c | 2 +-
  75. grub-core/net/dns.c | 10 +++++-----
  76. grub-core/net/net.c | 4 ++--
  77. grub-core/normal/charset.c | 10 +++++-----
  78. grub-core/normal/cmdline.c | 14 +++++++-------
  79. grub-core/normal/menu_entry.c | 14 +++++++-------
  80. grub-core/normal/menu_text.c | 4 ++--
  81. grub-core/normal/term.c | 4 ++--
  82. grub-core/osdep/linux/getroot.c | 6 +++---
  83. grub-core/osdep/unix/config.c | 2 +-
  84. grub-core/osdep/windows/getroot.c | 2 +-
  85. grub-core/osdep/windows/hostdisk.c | 4 ++--
  86. grub-core/osdep/windows/init.c | 2 +-
  87. grub-core/osdep/windows/platform.c | 4 ++--
  88. grub-core/osdep/windows/relpath.c | 2 +-
  89. grub-core/partmap/gpt.c | 2 +-
  90. grub-core/partmap/msdos.c | 2 +-
  91. grub-core/script/execute.c | 2 +-
  92. grub-core/tests/fake_input.c | 2 +-
  93. grub-core/tests/video_checksum.c | 6 +++---
  94. grub-core/video/capture.c | 2 +-
  95. grub-core/video/emu/sdl.c | 2 +-
  96. grub-core/video/i386/pc/vga.c | 2 +-
  97. grub-core/video/readers/png.c | 2 +-
  98. include/grub/unicode.h | 4 ++--
  99. util/getroot.c | 2 +-
  100. util/grub-file.c | 2 +-
  101. util/grub-fstest.c | 4 ++--
  102. util/grub-install-common.c | 2 +-
  103. util/grub-install.c | 4 ++--
  104. util/grub-mkimagexx.c | 6 ++----
  105. util/grub-mkrescue.c | 4 ++--
  106. util/grub-mkstandalone.c | 2 +-
  107. util/grub-pe2elf.c | 12 +++++-------
  108. util/grub-probe.c | 4 ++--
  109. 86 files changed, 176 insertions(+), 175 deletions(-)
  110. diff --git a/grub-core/bus/usb/usbhub.c b/grub-core/bus/usb/usbhub.c
  111. index 34a7ff1b5..a06cce302 100644
  112. --- a/grub-core/bus/usb/usbhub.c
  113. +++ b/grub-core/bus/usb/usbhub.c
  114. @@ -149,8 +149,8 @@ grub_usb_add_hub (grub_usb_device_t dev)
  115. grub_usb_set_configuration (dev, 1);
  116. dev->nports = hubdesc.portcnt;
  117. - dev->children = grub_zalloc (hubdesc.portcnt * sizeof (dev->children[0]));
  118. - dev->ports = grub_zalloc (dev->nports * sizeof (dev->ports[0]));
  119. + dev->children = grub_calloc (hubdesc.portcnt, sizeof (dev->children[0]));
  120. + dev->ports = grub_calloc (dev->nports, sizeof (dev->ports[0]));
  121. if (!dev->children || !dev->ports)
  122. {
  123. grub_free (dev->children);
  124. @@ -268,8 +268,8 @@ grub_usb_controller_dev_register_iter (grub_usb_controller_t controller, void *d
  125. /* Query the number of ports the root Hub has. */
  126. hub->nports = controller->dev->hubports (controller);
  127. - hub->devices = grub_zalloc (sizeof (hub->devices[0]) * hub->nports);
  128. - hub->ports = grub_zalloc (sizeof (hub->ports[0]) * hub->nports);
  129. + hub->devices = grub_calloc (hub->nports, sizeof (hub->devices[0]));
  130. + hub->ports = grub_calloc (hub->nports, sizeof (hub->ports[0]));
  131. if (!hub->devices || !hub->ports)
  132. {
  133. grub_free (hub->devices);
  134. diff --git a/grub-core/commands/efi/lsefisystab.c b/grub-core/commands/efi/lsefisystab.c
  135. index df1030221..cd81507f5 100644
  136. --- a/grub-core/commands/efi/lsefisystab.c
  137. +++ b/grub-core/commands/efi/lsefisystab.c
  138. @@ -71,7 +71,8 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
  139. grub_printf ("Vendor: ");
  140. for (vendor_utf16 = st->firmware_vendor; *vendor_utf16; vendor_utf16++);
  141. - vendor = grub_malloc (4 * (vendor_utf16 - st->firmware_vendor) + 1);
  142. + /* Allocate extra 3 bytes to simplify math. */
  143. + vendor = grub_calloc (4, vendor_utf16 - st->firmware_vendor + 1);
  144. if (!vendor)
  145. return grub_errno;
  146. *grub_utf16_to_utf8 ((grub_uint8_t *) vendor, st->firmware_vendor,
  147. diff --git a/grub-core/commands/legacycfg.c b/grub-core/commands/legacycfg.c
  148. index db7a8f002..5e3ec0d5e 100644
  149. --- a/grub-core/commands/legacycfg.c
  150. +++ b/grub-core/commands/legacycfg.c
  151. @@ -314,7 +314,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
  152. if (argc < 2)
  153. return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
  154. - cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1));
  155. + cutargs = grub_calloc (argc - 1, sizeof (cutargs[0]));
  156. if (!cutargs)
  157. return grub_errno;
  158. cutargc = argc - 1;
  159. @@ -436,7 +436,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
  160. {
  161. char rbuf[3] = "-r";
  162. bsdargc = cutargc + 2;
  163. - bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc);
  164. + bsdargs = grub_calloc (bsdargc, sizeof (bsdargs[0]));
  165. if (!bsdargs)
  166. {
  167. err = grub_errno;
  168. @@ -559,7 +559,7 @@ grub_cmd_legacy_initrdnounzip (struct grub_command *mycmd __attribute__ ((unused
  169. return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
  170. "module");
  171. - newargs = grub_malloc ((argc + 1) * sizeof (newargs[0]));
  172. + newargs = grub_calloc (argc + 1, sizeof (newargs[0]));
  173. if (!newargs)
  174. return grub_errno;
  175. grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0]));
  176. diff --git a/grub-core/commands/menuentry.c b/grub-core/commands/menuentry.c
  177. index 2c5363da7..9164df744 100644
  178. --- a/grub-core/commands/menuentry.c
  179. +++ b/grub-core/commands/menuentry.c
  180. @@ -154,7 +154,7 @@ grub_normal_add_menu_entry (int argc, const char **args,
  181. goto fail;
  182. /* Save argc, args to pass as parameters to block arg later. */
  183. - menu_args = grub_malloc (sizeof (char*) * (argc + 1));
  184. + menu_args = grub_calloc (argc + 1, sizeof (char *));
  185. if (! menu_args)
  186. goto fail;
  187. diff --git a/grub-core/commands/nativedisk.c b/grub-core/commands/nativedisk.c
  188. index 699447d11..7c8f97f6a 100644
  189. --- a/grub-core/commands/nativedisk.c
  190. +++ b/grub-core/commands/nativedisk.c
  191. @@ -195,7 +195,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
  192. else
  193. path_prefix = prefix;
  194. - mods = grub_malloc (argc * sizeof (mods[0]));
  195. + mods = grub_calloc (argc, sizeof (mods[0]));
  196. if (!mods)
  197. return grub_errno;
  198. diff --git a/grub-core/commands/parttool.c b/grub-core/commands/parttool.c
  199. index 22b46b187..051e31320 100644
  200. --- a/grub-core/commands/parttool.c
  201. +++ b/grub-core/commands/parttool.c
  202. @@ -59,7 +59,13 @@ grub_parttool_register(const char *part_name,
  203. for (nargs = 0; args[nargs].name != 0; nargs++);
  204. cur->nargs = nargs;
  205. cur->args = (struct grub_parttool_argdesc *)
  206. - grub_malloc ((nargs + 1) * sizeof (struct grub_parttool_argdesc));
  207. + grub_calloc (nargs + 1, sizeof (struct grub_parttool_argdesc));
  208. + if (!cur->args)
  209. + {
  210. + grub_free (cur);
  211. + curhandle--;
  212. + return -1;
  213. + }
  214. grub_memcpy (cur->args, args,
  215. (nargs + 1) * sizeof (struct grub_parttool_argdesc));
  216. @@ -257,7 +263,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
  217. return err;
  218. }
  219. - parsed = (int *) grub_zalloc (argc * sizeof (int));
  220. + parsed = (int *) grub_calloc (argc, sizeof (int));
  221. for (i = 1; i < argc; i++)
  222. if (! parsed[i])
  223. @@ -290,7 +296,7 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
  224. }
  225. ptool = cur;
  226. pargs = (struct grub_parttool_args *)
  227. - grub_zalloc (ptool->nargs * sizeof (struct grub_parttool_args));
  228. + grub_calloc (ptool->nargs, sizeof (struct grub_parttool_args));
  229. for (j = i; j < argc; j++)
  230. if (! parsed[j])
  231. {
  232. diff --git a/grub-core/commands/regexp.c b/grub-core/commands/regexp.c
  233. index f00b184c8..4019164f3 100644
  234. --- a/grub-core/commands/regexp.c
  235. +++ b/grub-core/commands/regexp.c
  236. @@ -116,7 +116,7 @@ grub_cmd_regexp (grub_extcmd_context_t ctxt, int argc, char **args)
  237. if (ret)
  238. goto fail;
  239. - matches = grub_zalloc (sizeof (*matches) * (regex.re_nsub + 1));
  240. + matches = grub_calloc (regex.re_nsub + 1, sizeof (*matches));
  241. if (! matches)
  242. goto fail;
  243. diff --git a/grub-core/commands/search_wrap.c b/grub-core/commands/search_wrap.c
  244. index d7fd26b94..47fc8eb99 100644
  245. --- a/grub-core/commands/search_wrap.c
  246. +++ b/grub-core/commands/search_wrap.c
  247. @@ -122,7 +122,7 @@ grub_cmd_search (grub_extcmd_context_t ctxt, int argc, char **args)
  248. for (i = 0; state[SEARCH_HINT_BAREMETAL].args[i]; i++)
  249. nhints++;
  250. - hints = grub_malloc (sizeof (hints[0]) * nhints);
  251. + hints = grub_calloc (nhints, sizeof (hints[0]));
  252. if (!hints)
  253. return grub_errno;
  254. j = 0;
  255. diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c
  256. index c3b578acf..68ca9e0be 100644
  257. --- a/grub-core/disk/diskfilter.c
  258. +++ b/grub-core/disk/diskfilter.c
  259. @@ -1134,7 +1134,7 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
  260. array->lvs->segments->node_count = nmemb;
  261. array->lvs->segments->raid_member_size = disk_size;
  262. array->lvs->segments->nodes
  263. - = grub_zalloc (nmemb * sizeof (array->lvs->segments->nodes[0]));
  264. + = grub_calloc (nmemb, sizeof (array->lvs->segments->nodes[0]));
  265. array->lvs->segments->stripe_size = stripe_size;
  266. for (i = 0; i < nmemb; i++)
  267. {
  268. @@ -1226,7 +1226,7 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id,
  269. grub_partition_t p;
  270. for (p = disk->partition; p; p = p->parent)
  271. s++;
  272. - pv->partmaps = xmalloc (s * sizeof (pv->partmaps[0]));
  273. + pv->partmaps = xcalloc (s, sizeof (pv->partmaps[0]));
  274. s = 0;
  275. for (p = disk->partition; p; p = p->parent)
  276. pv->partmaps[s++] = xstrdup (p->partmap->name);
  277. diff --git a/grub-core/disk/ieee1275/ofdisk.c b/grub-core/disk/ieee1275/ofdisk.c
  278. index f73257e66..03674cb47 100644
  279. --- a/grub-core/disk/ieee1275/ofdisk.c
  280. +++ b/grub-core/disk/ieee1275/ofdisk.c
  281. @@ -297,7 +297,7 @@ dev_iterate (const struct grub_ieee1275_devalias *alias)
  282. /* Power machines documentation specify 672 as maximum SAS disks in
  283. one system. Using a slightly larger value to be safe. */
  284. table_size = 768;
  285. - table = grub_malloc (table_size * sizeof (grub_uint64_t));
  286. + table = grub_calloc (table_size, sizeof (grub_uint64_t));
  287. if (!table)
  288. {
  289. diff --git a/grub-core/disk/ldm.c b/grub-core/disk/ldm.c
  290. index 2a22d2d6c..e6323701a 100644
  291. --- a/grub-core/disk/ldm.c
  292. +++ b/grub-core/disk/ldm.c
  293. @@ -323,8 +323,8 @@ make_vg (grub_disk_t disk,
  294. lv->segments->type = GRUB_DISKFILTER_MIRROR;
  295. lv->segments->node_count = 0;
  296. lv->segments->node_alloc = 8;
  297. - lv->segments->nodes = grub_zalloc (sizeof (*lv->segments->nodes)
  298. - * lv->segments->node_alloc);
  299. + lv->segments->nodes = grub_calloc (lv->segments->node_alloc,
  300. + sizeof (*lv->segments->nodes));
  301. if (!lv->segments->nodes)
  302. goto fail2;
  303. ptr = vblk[i].dynamic;
  304. @@ -543,8 +543,8 @@ make_vg (grub_disk_t disk,
  305. {
  306. comp->segment_alloc = 8;
  307. comp->segment_count = 0;
  308. - comp->segments = grub_malloc (sizeof (*comp->segments)
  309. - * comp->segment_alloc);
  310. + comp->segments = grub_calloc (comp->segment_alloc,
  311. + sizeof (*comp->segments));
  312. if (!comp->segments)
  313. goto fail2;
  314. }
  315. @@ -590,8 +590,8 @@ make_vg (grub_disk_t disk,
  316. }
  317. comp->segments->node_count = read_int (ptr + 1, *ptr);
  318. comp->segments->node_alloc = comp->segments->node_count;
  319. - comp->segments->nodes = grub_zalloc (sizeof (*comp->segments->nodes)
  320. - * comp->segments->node_alloc);
  321. + comp->segments->nodes = grub_calloc (comp->segments->node_alloc,
  322. + sizeof (*comp->segments->nodes));
  323. if (!lv->segments->nodes)
  324. goto fail2;
  325. }
  326. @@ -1017,7 +1017,7 @@ grub_util_ldm_embed (struct grub_disk *disk, unsigned int *nsectors,
  327. *nsectors = lv->size;
  328. if (*nsectors > max_nsectors)
  329. *nsectors = max_nsectors;
  330. - *sectors = grub_malloc (*nsectors * sizeof (**sectors));
  331. + *sectors = grub_calloc (*nsectors, sizeof (**sectors));
  332. if (!*sectors)
  333. return grub_errno;
  334. for (i = 0; i < *nsectors; i++)
  335. diff --git a/grub-core/disk/luks.c b/grub-core/disk/luks.c
  336. index 86c50c612..18b3a8bb1 100644
  337. --- a/grub-core/disk/luks.c
  338. +++ b/grub-core/disk/luks.c
  339. @@ -336,7 +336,7 @@ luks_recover_key (grub_disk_t source,
  340. && grub_be_to_cpu32 (header.keyblock[i].stripes) > max_stripes)
  341. max_stripes = grub_be_to_cpu32 (header.keyblock[i].stripes);
  342. - split_key = grub_malloc (keysize * max_stripes);
  343. + split_key = grub_calloc (keysize, max_stripes);
  344. if (!split_key)
  345. return grub_errno;
  346. diff --git a/grub-core/disk/lvm.c b/grub-core/disk/lvm.c
  347. index 7b265c780..d1df640b3 100644
  348. --- a/grub-core/disk/lvm.c
  349. +++ b/grub-core/disk/lvm.c
  350. @@ -173,7 +173,7 @@ grub_lvm_detect (grub_disk_t disk,
  351. first one. */
  352. /* Allocate buffer space for the circular worst-case scenario. */
  353. - metadatabuf = grub_malloc (2 * mda_size);
  354. + metadatabuf = grub_calloc (2, mda_size);
  355. if (! metadatabuf)
  356. goto fail;
  357. @@ -426,7 +426,7 @@ grub_lvm_detect (grub_disk_t disk,
  358. #endif
  359. goto lvs_fail;
  360. }
  361. - lv->segments = grub_zalloc (sizeof (*seg) * lv->segment_count);
  362. + lv->segments = grub_calloc (lv->segment_count, sizeof (*seg));
  363. seg = lv->segments;
  364. for (i = 0; i < lv->segment_count; i++)
  365. @@ -483,8 +483,8 @@ grub_lvm_detect (grub_disk_t disk,
  366. if (seg->node_count != 1)
  367. seg->stripe_size = grub_lvm_getvalue (&p, "stripe_size = ");
  368. - seg->nodes = grub_zalloc (sizeof (*stripe)
  369. - * seg->node_count);
  370. + seg->nodes = grub_calloc (seg->node_count,
  371. + sizeof (*stripe));
  372. stripe = seg->nodes;
  373. p = grub_strstr (p, "stripes = [");
  374. diff --git a/grub-core/disk/xen/xendisk.c b/grub-core/disk/xen/xendisk.c
  375. index 48476cbbf..d6612eebd 100644
  376. --- a/grub-core/disk/xen/xendisk.c
  377. +++ b/grub-core/disk/xen/xendisk.c
  378. @@ -426,7 +426,7 @@ grub_xendisk_init (void)
  379. if (!ctr)
  380. return;
  381. - virtdisks = grub_malloc (ctr * sizeof (virtdisks[0]));
  382. + virtdisks = grub_calloc (ctr, sizeof (virtdisks[0]));
  383. if (!virtdisks)
  384. return;
  385. if (grub_xenstore_dir ("device/vbd", fill, &ctr))
  386. diff --git a/grub-core/efiemu/loadcore.c b/grub-core/efiemu/loadcore.c
  387. index 44085ef81..2b924623f 100644
  388. --- a/grub-core/efiemu/loadcore.c
  389. +++ b/grub-core/efiemu/loadcore.c
  390. @@ -201,7 +201,7 @@ grub_efiemu_count_symbols (const Elf_Ehdr *e)
  391. grub_efiemu_nelfsyms = (unsigned) s->sh_size / (unsigned) s->sh_entsize;
  392. grub_efiemu_elfsyms = (struct grub_efiemu_elf_sym *)
  393. - grub_malloc (sizeof (struct grub_efiemu_elf_sym) * grub_efiemu_nelfsyms);
  394. + grub_calloc (grub_efiemu_nelfsyms, sizeof (struct grub_efiemu_elf_sym));
  395. /* Relocators */
  396. for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff);
  397. diff --git a/grub-core/efiemu/mm.c b/grub-core/efiemu/mm.c
  398. index 52a032f7b..9b8e0d0ad 100644
  399. --- a/grub-core/efiemu/mm.c
  400. +++ b/grub-core/efiemu/mm.c
  401. @@ -554,11 +554,11 @@ grub_efiemu_mmap_sort_and_uniq (void)
  402. /* Initialize variables*/
  403. grub_memset (present, 0, sizeof (int) * GRUB_EFI_MAX_MEMORY_TYPE);
  404. scanline_events = (struct grub_efiemu_mmap_scan *)
  405. - grub_malloc (sizeof (struct grub_efiemu_mmap_scan) * 2 * mmap_num);
  406. + grub_calloc (mmap_num, sizeof (struct grub_efiemu_mmap_scan) * 2);
  407. /* Number of chunks can't increase more than by factor of 2 */
  408. result = (grub_efi_memory_descriptor_t *)
  409. - grub_malloc (sizeof (grub_efi_memory_descriptor_t) * 2 * mmap_num);
  410. + grub_calloc (mmap_num, sizeof (grub_efi_memory_descriptor_t) * 2);
  411. if (!result || !scanline_events)
  412. {
  413. grub_free (result);
  414. @@ -660,7 +660,7 @@ grub_efiemu_mm_do_alloc (void)
  415. /* Preallocate mmap */
  416. efiemu_mmap = (grub_efi_memory_descriptor_t *)
  417. - grub_malloc (mmap_reserved_size * sizeof (grub_efi_memory_descriptor_t));
  418. + grub_calloc (mmap_reserved_size, sizeof (grub_efi_memory_descriptor_t));
  419. if (!efiemu_mmap)
  420. {
  421. grub_efiemu_unload ();
  422. diff --git a/grub-core/font/font.c b/grub-core/font/font.c
  423. index 85a292557..8e118b315 100644
  424. --- a/grub-core/font/font.c
  425. +++ b/grub-core/font/font.c
  426. @@ -293,8 +293,7 @@ load_font_index (grub_file_t file, grub_uint32_t sect_length, struct
  427. font->num_chars = sect_length / FONT_CHAR_INDEX_ENTRY_SIZE;
  428. /* Allocate the character index array. */
  429. - font->char_index = grub_malloc (font->num_chars
  430. - * sizeof (struct char_index_entry));
  431. + font->char_index = grub_calloc (font->num_chars, sizeof (struct char_index_entry));
  432. if (!font->char_index)
  433. return 1;
  434. font->bmp_idx = grub_malloc (0x10000 * sizeof (grub_uint16_t));
  435. diff --git a/grub-core/fs/affs.c b/grub-core/fs/affs.c
  436. index 6b6a2bc91..220b3712f 100644
  437. --- a/grub-core/fs/affs.c
  438. +++ b/grub-core/fs/affs.c
  439. @@ -301,7 +301,7 @@ grub_affs_read_symlink (grub_fshelp_node_t node)
  440. return 0;
  441. }
  442. latin1[symlink_size] = 0;
  443. - utf8 = grub_malloc (symlink_size * GRUB_MAX_UTF8_PER_LATIN1 + 1);
  444. + utf8 = grub_calloc (GRUB_MAX_UTF8_PER_LATIN1 + 1, symlink_size);
  445. if (!utf8)
  446. {
  447. grub_free (latin1);
  448. @@ -422,7 +422,7 @@ grub_affs_iterate_dir (grub_fshelp_node_t dir,
  449. return 1;
  450. }
  451. - hashtable = grub_zalloc (data->htsize * sizeof (*hashtable));
  452. + hashtable = grub_calloc (data->htsize, sizeof (*hashtable));
  453. if (!hashtable)
  454. return 1;
  455. @@ -628,7 +628,7 @@ grub_affs_label (grub_device_t device, char **label)
  456. len = file.namelen;
  457. if (len > sizeof (file.name))
  458. len = sizeof (file.name);
  459. - *label = grub_malloc (len * GRUB_MAX_UTF8_PER_LATIN1 + 1);
  460. + *label = grub_calloc (GRUB_MAX_UTF8_PER_LATIN1 + 1, len);
  461. if (*label)
  462. *grub_latin1_to_utf8 ((grub_uint8_t *) *label, file.name, len) = '\0';
  463. }
  464. diff --git a/grub-core/fs/btrfs.c b/grub-core/fs/btrfs.c
  465. index 48bd3d04a..11272efc1 100644
  466. --- a/grub-core/fs/btrfs.c
  467. +++ b/grub-core/fs/btrfs.c
  468. @@ -413,7 +413,7 @@ lower_bound (struct grub_btrfs_data *data,
  469. {
  470. desc->allocated = 16;
  471. desc->depth = 0;
  472. - desc->data = grub_malloc (sizeof (desc->data[0]) * desc->allocated);
  473. + desc->data = grub_calloc (desc->allocated, sizeof (desc->data[0]));
  474. if (!desc->data)
  475. return grub_errno;
  476. }
  477. @@ -752,7 +752,7 @@ raid56_read_retry (struct grub_btrfs_data *data,
  478. grub_err_t ret = GRUB_ERR_OUT_OF_MEMORY;
  479. grub_uint64_t i, failed_devices;
  480. - buffers = grub_zalloc (sizeof(*buffers) * nstripes);
  481. + buffers = grub_calloc (nstripes, sizeof (*buffers));
  482. if (!buffers)
  483. goto cleanup;
  484. @@ -2160,7 +2160,7 @@ grub_btrfs_embed (grub_device_t device __attribute__ ((unused)),
  485. *nsectors = 64 * 2 - 1;
  486. if (*nsectors > max_nsectors)
  487. *nsectors = max_nsectors;
  488. - *sectors = grub_malloc (*nsectors * sizeof (**sectors));
  489. + *sectors = grub_calloc (*nsectors, sizeof (**sectors));
  490. if (!*sectors)
  491. return grub_errno;
  492. for (i = 0; i < *nsectors; i++)
  493. diff --git a/grub-core/fs/hfs.c b/grub-core/fs/hfs.c
  494. index ac0a40990..3fe842b4d 100644
  495. --- a/grub-core/fs/hfs.c
  496. +++ b/grub-core/fs/hfs.c
  497. @@ -1360,7 +1360,7 @@ grub_hfs_label (grub_device_t device, char **label)
  498. grub_size_t len = data->sblock.volname[0];
  499. if (len > sizeof (data->sblock.volname) - 1)
  500. len = sizeof (data->sblock.volname) - 1;
  501. - *label = grub_malloc (len * MAX_UTF8_PER_MAC_ROMAN + 1);
  502. + *label = grub_calloc (MAX_UTF8_PER_MAC_ROMAN + 1, len);
  503. if (*label)
  504. macroman_to_utf8 (*label, data->sblock.volname + 1,
  505. len + 1, 0);
  506. diff --git a/grub-core/fs/hfsplus.c b/grub-core/fs/hfsplus.c
  507. index 54786bb1c..dae43becc 100644
  508. --- a/grub-core/fs/hfsplus.c
  509. +++ b/grub-core/fs/hfsplus.c
  510. @@ -720,7 +720,7 @@ list_nodes (void *record, void *hook_arg)
  511. if (! filename)
  512. return 0;
  513. - keyname = grub_malloc (grub_be_to_cpu16 (catkey->namelen) * sizeof (*keyname));
  514. + keyname = grub_calloc (grub_be_to_cpu16 (catkey->namelen), sizeof (*keyname));
  515. if (!keyname)
  516. {
  517. grub_free (filename);
  518. @@ -1007,7 +1007,7 @@ grub_hfsplus_label (grub_device_t device, char **label)
  519. grub_hfsplus_btree_recptr (&data->catalog_tree, node, ptr);
  520. label_len = grub_be_to_cpu16 (catkey->namelen);
  521. - label_name = grub_malloc (label_len * sizeof (*label_name));
  522. + label_name = grub_calloc (label_len, sizeof (*label_name));
  523. if (!label_name)
  524. {
  525. grub_free (node);
  526. @@ -1029,7 +1029,7 @@ grub_hfsplus_label (grub_device_t device, char **label)
  527. }
  528. }
  529. - *label = grub_malloc (label_len * GRUB_MAX_UTF8_PER_UTF16 + 1);
  530. + *label = grub_calloc (label_len, GRUB_MAX_UTF8_PER_UTF16 + 1);
  531. if (! *label)
  532. {
  533. grub_free (label_name);
  534. diff --git a/grub-core/fs/iso9660.c b/grub-core/fs/iso9660.c
  535. index 49c0c632b..4f1b52a55 100644
  536. --- a/grub-core/fs/iso9660.c
  537. +++ b/grub-core/fs/iso9660.c
  538. @@ -331,7 +331,7 @@ grub_iso9660_convert_string (grub_uint8_t *us, int len)
  539. int i;
  540. grub_uint16_t t[MAX_NAMELEN / 2 + 1];
  541. - p = grub_malloc (len * GRUB_MAX_UTF8_PER_UTF16 + 1);
  542. + p = grub_calloc (len, GRUB_MAX_UTF8_PER_UTF16 + 1);
  543. if (! p)
  544. return NULL;
  545. diff --git a/grub-core/fs/ntfs.c b/grub-core/fs/ntfs.c
  546. index fc4e1f678..2f34f76da 100644
  547. --- a/grub-core/fs/ntfs.c
  548. +++ b/grub-core/fs/ntfs.c
  549. @@ -556,8 +556,8 @@ get_utf8 (grub_uint8_t *in, grub_size_t len)
  550. grub_uint16_t *tmp;
  551. grub_size_t i;
  552. - buf = grub_malloc (len * GRUB_MAX_UTF8_PER_UTF16 + 1);
  553. - tmp = grub_malloc (len * sizeof (tmp[0]));
  554. + buf = grub_calloc (len, GRUB_MAX_UTF8_PER_UTF16 + 1);
  555. + tmp = grub_calloc (len, sizeof (tmp[0]));
  556. if (!buf || !tmp)
  557. {
  558. grub_free (buf);
  559. diff --git a/grub-core/fs/sfs.c b/grub-core/fs/sfs.c
  560. index 50c1fe72f..90f7fb379 100644
  561. --- a/grub-core/fs/sfs.c
  562. +++ b/grub-core/fs/sfs.c
  563. @@ -266,7 +266,7 @@ grub_sfs_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
  564. node->next_extent = node->block;
  565. node->cache_size = 0;
  566. - node->cache = grub_malloc (sizeof (node->cache[0]) * cache_size);
  567. + node->cache = grub_calloc (cache_size, sizeof (node->cache[0]));
  568. if (!node->cache)
  569. {
  570. grub_errno = 0;
  571. diff --git a/grub-core/fs/tar.c b/grub-core/fs/tar.c
  572. index 7d63e0c99..c551ed6b5 100644
  573. --- a/grub-core/fs/tar.c
  574. +++ b/grub-core/fs/tar.c
  575. @@ -120,7 +120,7 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name,
  576. if (data->linkname_alloc < linksize + 1)
  577. {
  578. char *n;
  579. - n = grub_malloc (2 * (linksize + 1));
  580. + n = grub_calloc (2, linksize + 1);
  581. if (!n)
  582. return grub_errno;
  583. grub_free (data->linkname);
  584. diff --git a/grub-core/fs/udf.c b/grub-core/fs/udf.c
  585. index dc8b6e2d1..a83761674 100644
  586. --- a/grub-core/fs/udf.c
  587. +++ b/grub-core/fs/udf.c
  588. @@ -873,7 +873,7 @@ read_string (const grub_uint8_t *raw, grub_size_t sz, char *outbuf)
  589. {
  590. unsigned i;
  591. utf16len = sz - 1;
  592. - utf16 = grub_malloc (utf16len * sizeof (utf16[0]));
  593. + utf16 = grub_calloc (utf16len, sizeof (utf16[0]));
  594. if (!utf16)
  595. return NULL;
  596. for (i = 0; i < utf16len; i++)
  597. @@ -883,7 +883,7 @@ read_string (const grub_uint8_t *raw, grub_size_t sz, char *outbuf)
  598. {
  599. unsigned i;
  600. utf16len = (sz - 1) / 2;
  601. - utf16 = grub_malloc (utf16len * sizeof (utf16[0]));
  602. + utf16 = grub_calloc (utf16len, sizeof (utf16[0]));
  603. if (!utf16)
  604. return NULL;
  605. for (i = 0; i < utf16len; i++)
  606. diff --git a/grub-core/fs/zfs/zfs.c b/grub-core/fs/zfs/zfs.c
  607. index 2f72e42bf..381dde556 100644
  608. --- a/grub-core/fs/zfs/zfs.c
  609. +++ b/grub-core/fs/zfs/zfs.c
  610. @@ -3325,7 +3325,7 @@ dnode_get_fullpath (const char *fullpath, struct subvolume *subvol,
  611. }
  612. subvol->nkeys = 0;
  613. zap_iterate (&keychain_dn, 8, count_zap_keys, &ctx, data);
  614. - subvol->keyring = grub_zalloc (subvol->nkeys * sizeof (subvol->keyring[0]));
  615. + subvol->keyring = grub_calloc (subvol->nkeys, sizeof (subvol->keyring[0]));
  616. if (!subvol->keyring)
  617. {
  618. grub_free (fsname);
  619. @@ -4336,7 +4336,7 @@ grub_zfs_embed (grub_device_t device __attribute__ ((unused)),
  620. *nsectors = (VDEV_BOOT_SIZE >> GRUB_DISK_SECTOR_BITS);
  621. if (*nsectors > max_nsectors)
  622. *nsectors = max_nsectors;
  623. - *sectors = grub_malloc (*nsectors * sizeof (**sectors));
  624. + *sectors = grub_calloc (*nsectors, sizeof (**sectors));
  625. if (!*sectors)
  626. return grub_errno;
  627. for (i = 0; i < *nsectors; i++)
  628. diff --git a/grub-core/gfxmenu/gui_string_util.c b/grub-core/gfxmenu/gui_string_util.c
  629. index a9a415e31..ba1e1eab3 100644
  630. --- a/grub-core/gfxmenu/gui_string_util.c
  631. +++ b/grub-core/gfxmenu/gui_string_util.c
  632. @@ -55,7 +55,7 @@ canonicalize_path (const char *path)
  633. if (*p == '/')
  634. components++;
  635. - char **path_array = grub_malloc (components * sizeof (*path_array));
  636. + char **path_array = grub_calloc (components, sizeof (*path_array));
  637. if (! path_array)
  638. return 0;
  639. diff --git a/grub-core/gfxmenu/widget-box.c b/grub-core/gfxmenu/widget-box.c
  640. index b60602889..470597ded 100644
  641. --- a/grub-core/gfxmenu/widget-box.c
  642. +++ b/grub-core/gfxmenu/widget-box.c
  643. @@ -303,10 +303,10 @@ grub_gfxmenu_create_box (const char *pixmaps_prefix,
  644. box->content_height = 0;
  645. box->raw_pixmaps =
  646. (struct grub_video_bitmap **)
  647. - grub_malloc (BOX_NUM_PIXMAPS * sizeof (struct grub_video_bitmap *));
  648. + grub_calloc (BOX_NUM_PIXMAPS, sizeof (struct grub_video_bitmap *));
  649. box->scaled_pixmaps =
  650. (struct grub_video_bitmap **)
  651. - grub_malloc (BOX_NUM_PIXMAPS * sizeof (struct grub_video_bitmap *));
  652. + grub_calloc (BOX_NUM_PIXMAPS, sizeof (struct grub_video_bitmap *));
  653. /* Initialize all pixmap pointers to NULL so that proper destruction can
  654. be performed if an error is encountered partway through construction. */
  655. diff --git a/grub-core/io/gzio.c b/grub-core/io/gzio.c
  656. index 6208a9763..43d98a7bd 100644
  657. --- a/grub-core/io/gzio.c
  658. +++ b/grub-core/io/gzio.c
  659. @@ -554,7 +554,7 @@ huft_build (unsigned *b, /* code lengths in bits (all assumed <= BMAX) */
  660. z = 1 << j; /* table entries for j-bit table */
  661. /* allocate and link in new table */
  662. - q = (struct huft *) grub_zalloc ((z + 1) * sizeof (struct huft));
  663. + q = (struct huft *) grub_calloc (z + 1, sizeof (struct huft));
  664. if (! q)
  665. {
  666. if (h)
  667. diff --git a/grub-core/kern/efi/efi.c b/grub-core/kern/efi/efi.c
  668. index 6e1ceb905..dc31caa21 100644
  669. --- a/grub-core/kern/efi/efi.c
  670. +++ b/grub-core/kern/efi/efi.c
  671. @@ -202,7 +202,7 @@ grub_efi_set_variable(const char *var, const grub_efi_guid_t *guid,
  672. len = grub_strlen (var);
  673. len16 = len * GRUB_MAX_UTF16_PER_UTF8;
  674. - var16 = grub_malloc ((len16 + 1) * sizeof (var16[0]));
  675. + var16 = grub_calloc (len16 + 1, sizeof (var16[0]));
  676. if (!var16)
  677. return grub_errno;
  678. len16 = grub_utf8_to_utf16 (var16, len16, (grub_uint8_t *) var, len, NULL);
  679. @@ -237,7 +237,7 @@ grub_efi_get_variable (const char *var, const grub_efi_guid_t *guid,
  680. len = grub_strlen (var);
  681. len16 = len * GRUB_MAX_UTF16_PER_UTF8;
  682. - var16 = grub_malloc ((len16 + 1) * sizeof (var16[0]));
  683. + var16 = grub_calloc (len16 + 1, sizeof (var16[0]));
  684. if (!var16)
  685. return NULL;
  686. len16 = grub_utf8_to_utf16 (var16, len16, (grub_uint8_t *) var, len, NULL);
  687. @@ -383,7 +383,7 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0)
  688. while (len > 0 && fp->path_name[len - 1] == 0)
  689. len--;
  690. - dup_name = grub_malloc (len * sizeof (*dup_name));
  691. + dup_name = grub_calloc (len, sizeof (*dup_name));
  692. if (!dup_name)
  693. {
  694. grub_free (name);
  695. diff --git a/grub-core/kern/emu/hostdisk.c b/grub-core/kern/emu/hostdisk.c
  696. index e9ec680cd..d975265b2 100644
  697. --- a/grub-core/kern/emu/hostdisk.c
  698. +++ b/grub-core/kern/emu/hostdisk.c
  699. @@ -615,7 +615,7 @@ static char *
  700. grub_util_path_concat_real (size_t n, int ext, va_list ap)
  701. {
  702. size_t totlen = 0;
  703. - char **l = xmalloc ((n + ext) * sizeof (l[0]));
  704. + char **l = xcalloc (n + ext, sizeof (l[0]));
  705. char *r, *p, *pi;
  706. size_t i;
  707. int first = 1;
  708. diff --git a/grub-core/kern/fs.c b/grub-core/kern/fs.c
  709. index 2b85f4950..f90be6566 100644
  710. --- a/grub-core/kern/fs.c
  711. +++ b/grub-core/kern/fs.c
  712. @@ -151,7 +151,7 @@ grub_fs_blocklist_open (grub_file_t file, const char *name)
  713. while (p);
  714. /* Allocate a block list. */
  715. - blocks = grub_zalloc (sizeof (struct grub_fs_block) * (num + 1));
  716. + blocks = grub_calloc (num + 1, sizeof (struct grub_fs_block));
  717. if (! blocks)
  718. return 0;
  719. diff --git a/grub-core/kern/misc.c b/grub-core/kern/misc.c
  720. index 3b633d51f..a7abd367a 100644
  721. --- a/grub-core/kern/misc.c
  722. +++ b/grub-core/kern/misc.c
  723. @@ -690,7 +690,7 @@ parse_printf_args (const char *fmt0, struct printf_args *args,
  724. args->ptr = args->prealloc;
  725. else
  726. {
  727. - args->ptr = grub_malloc (args->count * sizeof (args->ptr[0]));
  728. + args->ptr = grub_calloc (args->count, sizeof (args->ptr[0]));
  729. if (!args->ptr)
  730. {
  731. grub_errno = GRUB_ERR_NONE;
  732. diff --git a/grub-core/kern/parser.c b/grub-core/kern/parser.c
  733. index 78175aac2..619db3122 100644
  734. --- a/grub-core/kern/parser.c
  735. +++ b/grub-core/kern/parser.c
  736. @@ -213,7 +213,7 @@ grub_parser_split_cmdline (const char *cmdline,
  737. return grub_errno;
  738. grub_memcpy (args, buffer, bp - buffer);
  739. - *argv = grub_malloc (sizeof (char *) * (*argc + 1));
  740. + *argv = grub_calloc (*argc + 1, sizeof (char *));
  741. if (!*argv)
  742. {
  743. grub_free (args);
  744. diff --git a/grub-core/kern/uboot/uboot.c b/grub-core/kern/uboot/uboot.c
  745. index be4816fe6..aac8f9ae1 100644
  746. --- a/grub-core/kern/uboot/uboot.c
  747. +++ b/grub-core/kern/uboot/uboot.c
  748. @@ -133,7 +133,7 @@ grub_uboot_dev_enum (void)
  749. return num_devices;
  750. max_devices = 2;
  751. - enum_devices = grub_malloc (sizeof(struct device_info) * max_devices);
  752. + enum_devices = grub_calloc (max_devices, sizeof(struct device_info));
  753. if (!enum_devices)
  754. return 0;
  755. diff --git a/grub-core/lib/libgcrypt/cipher/ac.c b/grub-core/lib/libgcrypt/cipher/ac.c
  756. index f5e946a2d..63f6fcd11 100644
  757. --- a/grub-core/lib/libgcrypt/cipher/ac.c
  758. +++ b/grub-core/lib/libgcrypt/cipher/ac.c
  759. @@ -185,7 +185,7 @@ ac_data_mpi_copy (gcry_ac_mpi_t *data_mpis, unsigned int data_mpis_n,
  760. gcry_mpi_t mpi;
  761. char *label;
  762. - data_mpis_new = gcry_malloc (sizeof (*data_mpis_new) * data_mpis_n);
  763. + data_mpis_new = gcry_calloc (data_mpis_n, sizeof (*data_mpis_new));
  764. if (! data_mpis_new)
  765. {
  766. err = gcry_error_from_errno (errno);
  767. @@ -572,7 +572,7 @@ _gcry_ac_data_to_sexp (gcry_ac_data_t data, gcry_sexp_t *sexp,
  768. }
  769. /* Add MPI list. */
  770. - arg_list = gcry_malloc (sizeof (*arg_list) * (data_n + 1));
  771. + arg_list = gcry_calloc (data_n + 1, sizeof (*arg_list));
  772. if (! arg_list)
  773. {
  774. err = gcry_error_from_errno (errno);
  775. @@ -1283,7 +1283,7 @@ ac_data_construct (const char *identifier, int include_flags,
  776. /* We build a list of arguments to pass to
  777. gcry_sexp_build_array(). */
  778. data_length = _gcry_ac_data_length (data);
  779. - arg_list = gcry_malloc (sizeof (*arg_list) * (data_length * 2));
  780. + arg_list = gcry_calloc (data_length, sizeof (*arg_list) * 2);
  781. if (! arg_list)
  782. {
  783. err = gcry_error_from_errno (errno);
  784. @@ -1593,7 +1593,7 @@ _gcry_ac_key_pair_generate (gcry_ac_handle_t handle, unsigned int nbits,
  785. arg_list_n += 2;
  786. /* Allocate list. */
  787. - arg_list = gcry_malloc (sizeof (*arg_list) * arg_list_n);
  788. + arg_list = gcry_calloc (arg_list_n, sizeof (*arg_list));
  789. if (! arg_list)
  790. {
  791. err = gcry_error_from_errno (errno);
  792. diff --git a/grub-core/lib/libgcrypt/cipher/primegen.c b/grub-core/lib/libgcrypt/cipher/primegen.c
  793. index 2788e349f..b12e79b19 100644
  794. --- a/grub-core/lib/libgcrypt/cipher/primegen.c
  795. +++ b/grub-core/lib/libgcrypt/cipher/primegen.c
  796. @@ -383,7 +383,7 @@ prime_generate_internal (int need_q_factor,
  797. }
  798. /* Allocate an array to track pool usage. */
  799. - pool_in_use = gcry_malloc (n * sizeof *pool_in_use);
  800. + pool_in_use = gcry_calloc (n, sizeof *pool_in_use);
  801. if (!pool_in_use)
  802. {
  803. err = gpg_err_code_from_errno (errno);
  804. @@ -765,7 +765,7 @@ gen_prime (unsigned int nbits, int secret, int randomlevel,
  805. if (nbits < 16)
  806. log_fatal ("can't generate a prime with less than %d bits\n", 16);
  807. - mods = gcry_xmalloc( no_of_small_prime_numbers * sizeof *mods );
  808. + mods = gcry_xcalloc( no_of_small_prime_numbers, sizeof *mods);
  809. /* Make nbits fit into gcry_mpi_t implementation. */
  810. val_2 = mpi_alloc_set_ui( 2 );
  811. val_3 = mpi_alloc_set_ui( 3);
  812. diff --git a/grub-core/lib/libgcrypt/cipher/pubkey.c b/grub-core/lib/libgcrypt/cipher/pubkey.c
  813. index 910982141..ca087ad75 100644
  814. --- a/grub-core/lib/libgcrypt/cipher/pubkey.c
  815. +++ b/grub-core/lib/libgcrypt/cipher/pubkey.c
  816. @@ -2941,7 +2941,7 @@ gcry_pk_encrypt (gcry_sexp_t *r_ciph, gcry_sexp_t s_data, gcry_sexp_t s_pkey)
  817. * array to a format string, so we have to do it this way :-(. */
  818. /* FIXME: There is now such a format specifier, so we can
  819. change the code to be more clear. */
  820. - arg_list = malloc (nelem * sizeof *arg_list);
  821. + arg_list = calloc (nelem, sizeof *arg_list);
  822. if (!arg_list)
  823. {
  824. rc = gpg_err_code_from_syserror ();
  825. @@ -3233,7 +3233,7 @@ gcry_pk_sign (gcry_sexp_t *r_sig, gcry_sexp_t s_hash, gcry_sexp_t s_skey)
  826. }
  827. strcpy (p, "))");
  828. - arg_list = malloc (nelem * sizeof *arg_list);
  829. + arg_list = calloc (nelem, sizeof *arg_list);
  830. if (!arg_list)
  831. {
  832. rc = gpg_err_code_from_syserror ();
  833. diff --git a/grub-core/lib/priority_queue.c b/grub-core/lib/priority_queue.c
  834. index 659be0b7f..7d5e7c05a 100644
  835. --- a/grub-core/lib/priority_queue.c
  836. +++ b/grub-core/lib/priority_queue.c
  837. @@ -92,7 +92,7 @@ grub_priority_queue_new (grub_size_t elsize,
  838. {
  839. struct grub_priority_queue *ret;
  840. void *els;
  841. - els = grub_malloc (elsize * 8);
  842. + els = grub_calloc (8, elsize);
  843. if (!els)
  844. return 0;
  845. ret = (struct grub_priority_queue *) grub_malloc (sizeof (*ret));
  846. diff --git a/grub-core/lib/reed_solomon.c b/grub-core/lib/reed_solomon.c
  847. index ee9fa7b4f..467305b46 100644
  848. --- a/grub-core/lib/reed_solomon.c
  849. +++ b/grub-core/lib/reed_solomon.c
  850. @@ -20,6 +20,7 @@
  851. #include <stdio.h>
  852. #include <string.h>
  853. #include <stdlib.h>
  854. +#define xcalloc calloc
  855. #define xmalloc malloc
  856. #define grub_memset memset
  857. #define grub_memcpy memcpy
  858. @@ -158,11 +159,9 @@ rs_encode (gf_single_t *data, grub_size_t s, grub_size_t rs)
  859. gf_single_t *rs_polynomial;
  860. int i, j;
  861. gf_single_t *m;
  862. - m = xmalloc ((s + rs) * sizeof (gf_single_t));
  863. + m = xcalloc (s + rs, sizeof (gf_single_t));
  864. grub_memcpy (m, data, s * sizeof (gf_single_t));
  865. - grub_memset (m + s, 0, rs * sizeof (gf_single_t));
  866. - rs_polynomial = xmalloc ((rs + 1) * sizeof (gf_single_t));
  867. - grub_memset (rs_polynomial, 0, (rs + 1) * sizeof (gf_single_t));
  868. + rs_polynomial = xcalloc (rs + 1, sizeof (gf_single_t));
  869. rs_polynomial[rs] = 1;
  870. /* Multiply with X - a^r */
  871. for (j = 0; j < rs; j++)
  872. diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c
  873. index ea3ebc719..5847aac36 100644
  874. --- a/grub-core/lib/relocator.c
  875. +++ b/grub-core/lib/relocator.c
  876. @@ -495,9 +495,9 @@ malloc_in_range (struct grub_relocator *rel,
  877. }
  878. #endif
  879. - eventt = grub_malloc (maxevents * sizeof (events[0]));
  880. + eventt = grub_calloc (maxevents, sizeof (events[0]));
  881. counter = grub_malloc ((DIGITSORT_MASK + 2) * sizeof (counter[0]));
  882. - events = grub_malloc (maxevents * sizeof (events[0]));
  883. + events = grub_calloc (maxevents, sizeof (events[0]));
  884. if (!events || !eventt || !counter)
  885. {
  886. grub_dprintf ("relocator", "events or counter allocation failed %d\n",
  887. @@ -963,7 +963,7 @@ malloc_in_range (struct grub_relocator *rel,
  888. #endif
  889. unsigned cural = 0;
  890. int oom = 0;
  891. - res->subchunks = grub_malloc (sizeof (res->subchunks[0]) * nallocs);
  892. + res->subchunks = grub_calloc (nallocs, sizeof (res->subchunks[0]));
  893. if (!res->subchunks)
  894. oom = 1;
  895. res->nsubchunks = nallocs;
  896. @@ -1562,8 +1562,8 @@ grub_relocator_prepare_relocs (struct grub_relocator *rel, grub_addr_t addr,
  897. count[(chunk->src & 0xff) + 1]++;
  898. }
  899. }
  900. - from = grub_malloc (nchunks * sizeof (sorted[0]));
  901. - to = grub_malloc (nchunks * sizeof (sorted[0]));
  902. + from = grub_calloc (nchunks, sizeof (sorted[0]));
  903. + to = grub_calloc (nchunks, sizeof (sorted[0]));
  904. if (!from || !to)
  905. {
  906. grub_free (from);
  907. diff --git a/grub-core/lib/zstd/fse_decompress.c b/grub-core/lib/zstd/fse_decompress.c
  908. index 72bbead5b..2227b84bc 100644
  909. --- a/grub-core/lib/zstd/fse_decompress.c
  910. +++ b/grub-core/lib/zstd/fse_decompress.c
  911. @@ -82,7 +82,7 @@
  912. FSE_DTable* FSE_createDTable (unsigned tableLog)
  913. {
  914. if (tableLog > FSE_TABLELOG_ABSOLUTE_MAX) tableLog = FSE_TABLELOG_ABSOLUTE_MAX;
  915. - return (FSE_DTable*)malloc( FSE_DTABLE_SIZE_U32(tableLog) * sizeof (U32) );
  916. + return (FSE_DTable*)calloc( FSE_DTABLE_SIZE_U32(tableLog), sizeof (U32) );
  917. }
  918. void FSE_freeDTable (FSE_DTable* dt)
  919. diff --git a/grub-core/loader/arm/linux.c b/grub-core/loader/arm/linux.c
  920. index 51684914c..d70c17486 100644
  921. --- a/grub-core/loader/arm/linux.c
  922. +++ b/grub-core/loader/arm/linux.c
  923. @@ -78,7 +78,7 @@ linux_prepare_atag (void *target_atag)
  924. /* some place for cmdline, initrd and terminator. */
  925. tmp_size = get_atag_size (atag_orig) + 20 + (arg_size) / 4;
  926. - tmp_atag = grub_malloc (tmp_size * sizeof (grub_uint32_t));
  927. + tmp_atag = grub_calloc (tmp_size, sizeof (grub_uint32_t));
  928. if (!tmp_atag)
  929. return grub_errno;
  930. diff --git a/grub-core/loader/efi/chainloader.c b/grub-core/loader/efi/chainloader.c
  931. index cd92ea3f2..daf8c6b54 100644
  932. --- a/grub-core/loader/efi/chainloader.c
  933. +++ b/grub-core/loader/efi/chainloader.c
  934. @@ -116,7 +116,7 @@ copy_file_path (grub_efi_file_path_device_path_t *fp,
  935. fp->header.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE;
  936. fp->header.subtype = GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE;
  937. - path_name = grub_malloc (len * GRUB_MAX_UTF16_PER_UTF8 * sizeof (*path_name));
  938. + path_name = grub_calloc (len, GRUB_MAX_UTF16_PER_UTF8 * sizeof (*path_name));
  939. if (!path_name)
  940. return;
  941. diff --git a/grub-core/loader/i386/bsdXX.c b/grub-core/loader/i386/bsdXX.c
  942. index af6741d15..a8d8bf7da 100644
  943. --- a/grub-core/loader/i386/bsdXX.c
  944. +++ b/grub-core/loader/i386/bsdXX.c
  945. @@ -48,7 +48,7 @@ read_headers (grub_file_t file, const char *filename, Elf_Ehdr *e, char **shdr)
  946. if (e->e_ident[EI_CLASS] != SUFFIX (ELFCLASS))
  947. return grub_error (GRUB_ERR_BAD_OS, N_("invalid arch-dependent ELF magic"));
  948. - *shdr = grub_malloc ((grub_uint32_t) e->e_shnum * e->e_shentsize);
  949. + *shdr = grub_calloc (e->e_shnum, e->e_shentsize);
  950. if (! *shdr)
  951. return grub_errno;
  952. diff --git a/grub-core/loader/i386/xnu.c b/grub-core/loader/i386/xnu.c
  953. index e64ed08f5..b7d176b5d 100644
  954. --- a/grub-core/loader/i386/xnu.c
  955. +++ b/grub-core/loader/i386/xnu.c
  956. @@ -295,7 +295,7 @@ grub_xnu_devprop_add_property_utf8 (struct grub_xnu_devprop_device_descriptor *d
  957. return grub_errno;
  958. len = grub_strlen (name);
  959. - utf16 = grub_malloc (sizeof (grub_uint16_t) * len);
  960. + utf16 = grub_calloc (len, sizeof (grub_uint16_t));
  961. if (!utf16)
  962. {
  963. grub_free (utf8);
  964. @@ -331,7 +331,7 @@ grub_xnu_devprop_add_property_utf16 (struct grub_xnu_devprop_device_descriptor *
  965. grub_uint16_t *utf16;
  966. grub_err_t err;
  967. - utf16 = grub_malloc (sizeof (grub_uint16_t) * namelen);
  968. + utf16 = grub_calloc (namelen, sizeof (grub_uint16_t));
  969. if (!utf16)
  970. return grub_errno;
  971. grub_memcpy (utf16, name, sizeof (grub_uint16_t) * namelen);
  972. diff --git a/grub-core/loader/macho.c b/grub-core/loader/macho.c
  973. index 085f9c689..05710c48e 100644
  974. --- a/grub-core/loader/macho.c
  975. +++ b/grub-core/loader/macho.c
  976. @@ -97,7 +97,7 @@ grub_macho_file (grub_file_t file, const char *filename, int is_64bit)
  977. if (grub_file_seek (macho->file, sizeof (struct grub_macho_fat_header))
  978. == (grub_off_t) -1)
  979. goto fail;
  980. - archs = grub_malloc (sizeof (struct grub_macho_fat_arch) * narchs);
  981. + archs = grub_calloc (narchs, sizeof (struct grub_macho_fat_arch));
  982. if (!archs)
  983. goto fail;
  984. if (grub_file_read (macho->file, archs,
  985. diff --git a/grub-core/loader/multiboot_elfxx.c b/grub-core/loader/multiboot_elfxx.c
  986. index 70cd1db51..cc6853692 100644
  987. --- a/grub-core/loader/multiboot_elfxx.c
  988. +++ b/grub-core/loader/multiboot_elfxx.c
  989. @@ -217,7 +217,7 @@ CONCAT(grub_multiboot_load_elf, XX) (mbi_load_data_t *mld)
  990. {
  991. grub_uint8_t *shdr, *shdrptr;
  992. - shdr = grub_malloc ((grub_uint32_t) ehdr->e_shnum * ehdr->e_shentsize);
  993. + shdr = grub_calloc (ehdr->e_shnum, ehdr->e_shentsize);
  994. if (!shdr)
  995. return grub_errno;
  996. diff --git a/grub-core/loader/xnu.c b/grub-core/loader/xnu.c
  997. index 7f74d1d6f..77d7060e1 100644
  998. --- a/grub-core/loader/xnu.c
  999. +++ b/grub-core/loader/xnu.c
  1000. @@ -800,7 +800,7 @@ grub_cmd_xnu_mkext (grub_command_t cmd __attribute__ ((unused)),
  1001. if (grub_be_to_cpu32 (head.magic) == GRUB_MACHO_FAT_MAGIC)
  1002. {
  1003. narchs = grub_be_to_cpu32 (head.nfat_arch);
  1004. - archs = grub_malloc (sizeof (struct grub_macho_fat_arch) * narchs);
  1005. + archs = grub_calloc (narchs, sizeof (struct grub_macho_fat_arch));
  1006. if (! archs)
  1007. {
  1008. grub_file_close (file);
  1009. diff --git a/grub-core/mmap/mmap.c b/grub-core/mmap/mmap.c
  1010. index 6a31cbae3..57b4e9a72 100644
  1011. --- a/grub-core/mmap/mmap.c
  1012. +++ b/grub-core/mmap/mmap.c
  1013. @@ -143,9 +143,9 @@ grub_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
  1014. /* Initialize variables. */
  1015. ctx.scanline_events = (struct grub_mmap_scan *)
  1016. - grub_malloc (sizeof (struct grub_mmap_scan) * 2 * mmap_num);
  1017. + grub_calloc (mmap_num, sizeof (struct grub_mmap_scan) * 2);
  1018. - present = grub_zalloc (sizeof (present[0]) * current_priority);
  1019. + present = grub_calloc (current_priority, sizeof (present[0]));
  1020. if (! ctx.scanline_events || !present)
  1021. {
  1022. diff --git a/grub-core/net/bootp.c b/grub-core/net/bootp.c
  1023. index 04cfbb045..653957200 100644
  1024. --- a/grub-core/net/bootp.c
  1025. +++ b/grub-core/net/bootp.c
  1026. @@ -766,7 +766,7 @@ grub_cmd_bootp (struct grub_command *cmd __attribute__ ((unused)),
  1027. if (ncards == 0)
  1028. return grub_error (GRUB_ERR_NET_NO_CARD, N_("no network card found"));
  1029. - ifaces = grub_zalloc (ncards * sizeof (ifaces[0]));
  1030. + ifaces = grub_calloc (ncards, sizeof (ifaces[0]));
  1031. if (!ifaces)
  1032. return grub_errno;
  1033. diff --git a/grub-core/net/dns.c b/grub-core/net/dns.c
  1034. index 5d9afe093..e332d5eb4 100644
  1035. --- a/grub-core/net/dns.c
  1036. +++ b/grub-core/net/dns.c
  1037. @@ -285,8 +285,8 @@ recv_hook (grub_net_udp_socket_t sock __attribute__ ((unused)),
  1038. ptr++;
  1039. ptr += 4;
  1040. }
  1041. - *data->addresses = grub_malloc (sizeof ((*data->addresses)[0])
  1042. - * grub_be_to_cpu16 (head->ancount));
  1043. + *data->addresses = grub_calloc (grub_be_to_cpu16 (head->ancount),
  1044. + sizeof ((*data->addresses)[0]));
  1045. if (!*data->addresses)
  1046. {
  1047. grub_errno = GRUB_ERR_NONE;
  1048. @@ -406,8 +406,8 @@ recv_hook (grub_net_udp_socket_t sock __attribute__ ((unused)),
  1049. dns_cache[h].addresses = 0;
  1050. dns_cache[h].name = grub_strdup (data->oname);
  1051. dns_cache[h].naddresses = *data->naddresses;
  1052. - dns_cache[h].addresses = grub_malloc (*data->naddresses
  1053. - * sizeof (dns_cache[h].addresses[0]));
  1054. + dns_cache[h].addresses = grub_calloc (*data->naddresses,
  1055. + sizeof (dns_cache[h].addresses[0]));
  1056. dns_cache[h].limit_time = grub_get_time_ms () + 1000 * ttl_all;
  1057. if (!dns_cache[h].addresses || !dns_cache[h].name)
  1058. {
  1059. @@ -479,7 +479,7 @@ grub_net_dns_lookup (const char *name,
  1060. }
  1061. }
  1062. - sockets = grub_malloc (sizeof (sockets[0]) * n_servers);
  1063. + sockets = grub_calloc (n_servers, sizeof (sockets[0]));
  1064. if (!sockets)
  1065. return grub_errno;
  1066. diff --git a/grub-core/net/net.c b/grub-core/net/net.c
  1067. index d5d726a31..38f19dfc9 100644
  1068. --- a/grub-core/net/net.c
  1069. +++ b/grub-core/net/net.c
  1070. @@ -333,8 +333,8 @@ grub_cmd_ipv6_autoconf (struct grub_command *cmd __attribute__ ((unused)),
  1071. ncards++;
  1072. }
  1073. - ifaces = grub_zalloc (ncards * sizeof (ifaces[0]));
  1074. - slaacs = grub_zalloc (ncards * sizeof (slaacs[0]));
  1075. + ifaces = grub_calloc (ncards, sizeof (ifaces[0]));
  1076. + slaacs = grub_calloc (ncards, sizeof (slaacs[0]));
  1077. if (!ifaces || !slaacs)
  1078. {
  1079. grub_free (ifaces);
  1080. diff --git a/grub-core/normal/charset.c b/grub-core/normal/charset.c
  1081. index b0ab47d73..d57fb72fa 100644
  1082. --- a/grub-core/normal/charset.c
  1083. +++ b/grub-core/normal/charset.c
  1084. @@ -203,7 +203,7 @@ grub_utf8_to_ucs4_alloc (const char *msg, grub_uint32_t **unicode_msg,
  1085. {
  1086. grub_size_t msg_len = grub_strlen (msg);
  1087. - *unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t));
  1088. + *unicode_msg = grub_calloc (msg_len, sizeof (grub_uint32_t));
  1089. if (!*unicode_msg)
  1090. return -1;
  1091. @@ -488,7 +488,7 @@ grub_unicode_aglomerate_comb (const grub_uint32_t *in, grub_size_t inlen,
  1092. }
  1093. else
  1094. {
  1095. - n = grub_malloc (sizeof (n[0]) * (out->ncomb + 1));
  1096. + n = grub_calloc (out->ncomb + 1, sizeof (n[0]));
  1097. if (!n)
  1098. {
  1099. grub_errno = GRUB_ERR_NONE;
  1100. @@ -842,7 +842,7 @@ grub_bidi_line_logical_to_visual (const grub_uint32_t *logical,
  1101. } \
  1102. }
  1103. - visual = grub_malloc (sizeof (visual[0]) * logical_len);
  1104. + visual = grub_calloc (logical_len, sizeof (visual[0]));
  1105. if (!visual)
  1106. return -1;
  1107. @@ -1165,8 +1165,8 @@ grub_bidi_logical_to_visual (const grub_uint32_t *logical,
  1108. {
  1109. const grub_uint32_t *line_start = logical, *ptr;
  1110. struct grub_unicode_glyph *visual_ptr;
  1111. - *visual_out = visual_ptr = grub_malloc (3 * sizeof (visual_ptr[0])
  1112. - * (logical_len + 2));
  1113. + *visual_out = visual_ptr = grub_calloc (logical_len + 2,
  1114. + 3 * sizeof (visual_ptr[0]));
  1115. if (!visual_ptr)
  1116. return -1;
  1117. for (ptr = logical; ptr <= logical + logical_len; ptr++)
  1118. diff --git a/grub-core/normal/cmdline.c b/grub-core/normal/cmdline.c
  1119. index c037d5050..c57242e2e 100644
  1120. --- a/grub-core/normal/cmdline.c
  1121. +++ b/grub-core/normal/cmdline.c
  1122. @@ -41,7 +41,7 @@ grub_err_t
  1123. grub_set_history (int newsize)
  1124. {
  1125. grub_uint32_t **old_hist_lines = hist_lines;
  1126. - hist_lines = grub_malloc (sizeof (grub_uint32_t *) * newsize);
  1127. + hist_lines = grub_calloc (newsize, sizeof (grub_uint32_t *));
  1128. /* Copy the old lines into the new buffer. */
  1129. if (old_hist_lines)
  1130. @@ -114,7 +114,7 @@ static void
  1131. grub_history_set (int pos, grub_uint32_t *s, grub_size_t len)
  1132. {
  1133. grub_free (hist_lines[pos]);
  1134. - hist_lines[pos] = grub_malloc ((len + 1) * sizeof (grub_uint32_t));
  1135. + hist_lines[pos] = grub_calloc (len + 1, sizeof (grub_uint32_t));
  1136. if (!hist_lines[pos])
  1137. {
  1138. grub_print_error ();
  1139. @@ -349,7 +349,7 @@ grub_cmdline_get (const char *prompt_translated)
  1140. char *ret;
  1141. unsigned nterms;
  1142. - buf = grub_malloc (max_len * sizeof (grub_uint32_t));
  1143. + buf = grub_calloc (max_len, sizeof (grub_uint32_t));
  1144. if (!buf)
  1145. return 0;
  1146. @@ -377,7 +377,7 @@ grub_cmdline_get (const char *prompt_translated)
  1147. FOR_ACTIVE_TERM_OUTPUTS(cur)
  1148. nterms++;
  1149. - cl_terms = grub_malloc (sizeof (cl_terms[0]) * nterms);
  1150. + cl_terms = grub_calloc (nterms, sizeof (cl_terms[0]));
  1151. if (!cl_terms)
  1152. {
  1153. grub_free (buf);
  1154. @@ -385,7 +385,7 @@ grub_cmdline_get (const char *prompt_translated)
  1155. }
  1156. cl_term_cur = cl_terms;
  1157. - unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t));
  1158. + unicode_msg = grub_calloc (msg_len, sizeof (grub_uint32_t));
  1159. if (!unicode_msg)
  1160. {
  1161. grub_free (buf);
  1162. @@ -495,7 +495,7 @@ grub_cmdline_get (const char *prompt_translated)
  1163. grub_uint32_t *insert;
  1164. insertlen = grub_strlen (insertu8);
  1165. - insert = grub_malloc ((insertlen + 1) * sizeof (grub_uint32_t));
  1166. + insert = grub_calloc (insertlen + 1, sizeof (grub_uint32_t));
  1167. if (!insert)
  1168. {
  1169. grub_free (insertu8);
  1170. @@ -602,7 +602,7 @@ grub_cmdline_get (const char *prompt_translated)
  1171. grub_free (kill_buf);
  1172. - kill_buf = grub_malloc ((n + 1) * sizeof(grub_uint32_t));
  1173. + kill_buf = grub_calloc (n + 1, sizeof (grub_uint32_t));
  1174. if (grub_errno)
  1175. {
  1176. grub_print_error ();
  1177. diff --git a/grub-core/normal/menu_entry.c b/grub-core/normal/menu_entry.c
  1178. index cdf3590a3..1993995be 100644
  1179. --- a/grub-core/normal/menu_entry.c
  1180. +++ b/grub-core/normal/menu_entry.c
  1181. @@ -95,8 +95,8 @@ init_line (struct screen *screen, struct line *linep)
  1182. {
  1183. linep->len = 0;
  1184. linep->max_len = 80;
  1185. - linep->buf = grub_malloc ((linep->max_len + 1) * sizeof (linep->buf[0]));
  1186. - linep->pos = grub_zalloc (screen->nterms * sizeof (linep->pos[0]));
  1187. + linep->buf = grub_calloc (linep->max_len + 1, sizeof (linep->buf[0]));
  1188. + linep->pos = grub_calloc (screen->nterms, sizeof (linep->pos[0]));
  1189. if (! linep->buf || !linep->pos)
  1190. {
  1191. grub_free (linep->buf);
  1192. @@ -287,7 +287,7 @@ update_screen (struct screen *screen, struct per_term_screen *term_screen,
  1193. pos = linep->pos + (term_screen - screen->terms);
  1194. if (!*pos)
  1195. - *pos = grub_zalloc ((linep->len + 1) * sizeof (**pos));
  1196. + *pos = grub_calloc (linep->len + 1, sizeof (**pos));
  1197. if (i == region_start || linep == screen->lines + screen->line
  1198. || (i > region_start && mode == ALL_LINES))
  1199. @@ -471,7 +471,7 @@ insert_string (struct screen *screen, const char *s, int update)
  1200. /* Insert the string. */
  1201. current_linep = screen->lines + screen->line;
  1202. - unicode_msg = grub_malloc ((p - s) * sizeof (grub_uint32_t));
  1203. + unicode_msg = grub_calloc (p - s, sizeof (grub_uint32_t));
  1204. if (!unicode_msg)
  1205. return 0;
  1206. @@ -1023,7 +1023,7 @@ complete (struct screen *screen, int continuous, int update)
  1207. if (completion_buffer.buf)
  1208. {
  1209. buflen = grub_strlen (completion_buffer.buf);
  1210. - ucs4 = grub_malloc (sizeof (grub_uint32_t) * (buflen + 1));
  1211. + ucs4 = grub_calloc (buflen + 1, sizeof (grub_uint32_t));
  1212. if (!ucs4)
  1213. {
  1214. @@ -1268,7 +1268,7 @@ grub_menu_entry_run (grub_menu_entry_t entry)
  1215. for (i = 0; i < (unsigned) screen->num_lines; i++)
  1216. {
  1217. grub_free (screen->lines[i].pos);
  1218. - screen->lines[i].pos = grub_zalloc (screen->nterms * sizeof (screen->lines[i].pos[0]));
  1219. + screen->lines[i].pos = grub_calloc (screen->nterms, sizeof (screen->lines[i].pos[0]));
  1220. if (! screen->lines[i].pos)
  1221. {
  1222. grub_print_error ();
  1223. @@ -1278,7 +1278,7 @@ grub_menu_entry_run (grub_menu_entry_t entry)
  1224. }
  1225. }
  1226. - screen->terms = grub_zalloc (screen->nterms * sizeof (screen->terms[0]));
  1227. + screen->terms = grub_calloc (screen->nterms, sizeof (screen->terms[0]));
  1228. if (!screen->terms)
  1229. {
  1230. grub_print_error ();
  1231. diff --git a/grub-core/normal/menu_text.c b/grub-core/normal/menu_text.c
  1232. index e22bb91f6..18240e76c 100644
  1233. --- a/grub-core/normal/menu_text.c
  1234. +++ b/grub-core/normal/menu_text.c
  1235. @@ -78,7 +78,7 @@ grub_print_message_indented_real (const char *msg, int margin_left,
  1236. grub_size_t msg_len = grub_strlen (msg) + 2;
  1237. int ret = 0;
  1238. - unicode_msg = grub_malloc (msg_len * sizeof (grub_uint32_t));
  1239. + unicode_msg = grub_calloc (msg_len, sizeof (grub_uint32_t));
  1240. if (!unicode_msg)
  1241. return 0;
  1242. @@ -211,7 +211,7 @@ print_entry (int y, int highlight, grub_menu_entry_t entry,
  1243. title = entry ? entry->title : "";
  1244. title_len = grub_strlen (title);
  1245. - unicode_title = grub_malloc (title_len * sizeof (*unicode_title));
  1246. + unicode_title = grub_calloc (title_len, sizeof (*unicode_title));
  1247. if (! unicode_title)
  1248. /* XXX How to show this error? */
  1249. return;
  1250. diff --git a/grub-core/normal/term.c b/grub-core/normal/term.c
  1251. index a1e5c5a0d..cc8c173b6 100644
  1252. --- a/grub-core/normal/term.c
  1253. +++ b/grub-core/normal/term.c
  1254. @@ -264,7 +264,7 @@ grub_term_save_pos (void)
  1255. FOR_ACTIVE_TERM_OUTPUTS(cur)
  1256. cnt++;
  1257. - ret = grub_malloc (cnt * sizeof (ret[0]));
  1258. + ret = grub_calloc (cnt, sizeof (ret[0]));
  1259. if (!ret)
  1260. return NULL;
  1261. @@ -1013,7 +1013,7 @@ grub_xnputs (const char *str, grub_size_t msg_len)
  1262. grub_error_push ();
  1263. - unicode_str = grub_malloc (msg_len * sizeof (grub_uint32_t));
  1264. + unicode_str = grub_calloc (msg_len, sizeof (grub_uint32_t));
  1265. grub_error_pop ();
  1266. diff --git a/grub-core/osdep/linux/getroot.c b/grub-core/osdep/linux/getroot.c
  1267. index 90d92d3ad..5b41ad022 100644
  1268. --- a/grub-core/osdep/linux/getroot.c
  1269. +++ b/grub-core/osdep/linux/getroot.c
  1270. @@ -168,7 +168,7 @@ grub_util_raid_getmembers (const char *name, int bootable)
  1271. if (ret != 0)
  1272. grub_util_error (_("ioctl GET_ARRAY_INFO error: %s"), strerror (errno));
  1273. - devicelist = xmalloc ((info.nr_disks + 1) * sizeof (char *));
  1274. + devicelist = xcalloc (info.nr_disks + 1, sizeof (char *));
  1275. for (i = 0, j = 0; j < info.nr_disks; i++)
  1276. {
  1277. @@ -241,7 +241,7 @@ grub_find_root_devices_from_btrfs (const char *dir)
  1278. return NULL;
  1279. }
  1280. - ret = xmalloc ((fsi.num_devices + 1) * sizeof (ret[0]));
  1281. + ret = xcalloc (fsi.num_devices + 1, sizeof (ret[0]));
  1282. for (i = 1; i <= fsi.max_id && j < fsi.num_devices; i++)
  1283. {
  1284. @@ -396,7 +396,7 @@ grub_find_root_devices_from_mountinfo (const char *dir, char **relroot)
  1285. if (relroot)
  1286. *relroot = NULL;
  1287. - entries = xmalloc (entry_max * sizeof (*entries));
  1288. + entries = xcalloc (entry_max, sizeof (*entries));
  1289. again:
  1290. fp = grub_util_fopen ("/proc/self/mountinfo", "r");
  1291. diff --git a/grub-core/osdep/unix/config.c b/grub-core/osdep/unix/config.c
  1292. index 65effa9f3..7d6325138 100644
  1293. --- a/grub-core/osdep/unix/config.c
  1294. +++ b/grub-core/osdep/unix/config.c
  1295. @@ -89,7 +89,7 @@ grub_util_load_config (struct grub_util_config *cfg)
  1296. argv[0] = "sh";
  1297. argv[1] = "-c";
  1298. - script = xmalloc (4 * strlen (cfgfile) + 300);
  1299. + script = xcalloc (4, strlen (cfgfile) + 300);
  1300. ptr = script;
  1301. memcpy (ptr, ". '", 3);
  1302. diff --git a/grub-core/osdep/windows/getroot.c b/grub-core/osdep/windows/getroot.c
  1303. index 661d95461..eada663b2 100644
  1304. --- a/grub-core/osdep/windows/getroot.c
  1305. +++ b/grub-core/osdep/windows/getroot.c
  1306. @@ -59,7 +59,7 @@ grub_get_mount_point (const TCHAR *path)
  1307. for (ptr = path; *ptr; ptr++);
  1308. allocsize = (ptr - path + 10) * 2;
  1309. - out = xmalloc (allocsize * sizeof (out[0]));
  1310. + out = xcalloc (allocsize, sizeof (out[0]));
  1311. /* When pointing to EFI system partition GetVolumePathName fails
  1312. for ESP root and returns abberant information for everything
  1313. diff --git a/grub-core/osdep/windows/hostdisk.c b/grub-core/osdep/windows/hostdisk.c
  1314. index 355100789..0be327394 100644
  1315. --- a/grub-core/osdep/windows/hostdisk.c
  1316. +++ b/grub-core/osdep/windows/hostdisk.c
  1317. @@ -111,7 +111,7 @@ grub_util_get_windows_path_real (const char *path)
  1318. while (1)
  1319. {
  1320. - fpa = xmalloc (alloc * sizeof (fpa[0]));
  1321. + fpa = xcalloc (alloc, sizeof (fpa[0]));
  1322. len = GetFullPathName (tpath, alloc, fpa, NULL);
  1323. if (len >= alloc)
  1324. @@ -399,7 +399,7 @@ grub_util_fd_opendir (const char *name)
  1325. for (l = 0; name_windows[l]; l++);
  1326. for (l--; l >= 0 && (name_windows[l] == '\\' || name_windows[l] == '/'); l--);
  1327. l++;
  1328. - pattern = xmalloc ((l + 3) * sizeof (pattern[0]));
  1329. + pattern = xcalloc (l + 3, sizeof (pattern[0]));
  1330. memcpy (pattern, name_windows, l * sizeof (pattern[0]));
  1331. pattern[l] = '\\';
  1332. pattern[l + 1] = '*';
  1333. diff --git a/grub-core/osdep/windows/init.c b/grub-core/osdep/windows/init.c
  1334. index e8ffd62c6..6297de632 100644
  1335. --- a/grub-core/osdep/windows/init.c
  1336. +++ b/grub-core/osdep/windows/init.c
  1337. @@ -161,7 +161,7 @@ grub_util_host_init (int *argc __attribute__ ((unused)),
  1338. LPWSTR *targv;
  1339. targv = CommandLineToArgvW (tcmdline, argc);
  1340. - *argv = xmalloc ((*argc + 1) * sizeof (argv[0]));
  1341. + *argv = xcalloc (*argc + 1, sizeof (argv[0]));
  1342. for (i = 0; i < *argc; i++)
  1343. (*argv)[i] = grub_util_tchar_to_utf8 (targv[i]);
  1344. diff --git a/grub-core/osdep/windows/platform.c b/grub-core/osdep/windows/platform.c
  1345. index 7eb53fe01..1ef86bf58 100644
  1346. --- a/grub-core/osdep/windows/platform.c
  1347. +++ b/grub-core/osdep/windows/platform.c
  1348. @@ -225,8 +225,8 @@ grub_install_register_efi (grub_device_t efidir_grub_dev,
  1349. grub_util_error ("%s", _("no EFI routines are available when running in BIOS mode"));
  1350. distrib8_len = grub_strlen (efi_distributor);
  1351. - distributor16 = xmalloc ((distrib8_len + 1) * GRUB_MAX_UTF16_PER_UTF8
  1352. - * sizeof (grub_uint16_t));
  1353. + distributor16 = xcalloc (distrib8_len + 1,
  1354. + GRUB_MAX_UTF16_PER_UTF8 * sizeof (grub_uint16_t));
  1355. distrib16_len = grub_utf8_to_utf16 (distributor16, distrib8_len * GRUB_MAX_UTF16_PER_UTF8,
  1356. (const grub_uint8_t *) efi_distributor,
  1357. distrib8_len, 0);
  1358. diff --git a/grub-core/osdep/windows/relpath.c b/grub-core/osdep/windows/relpath.c
  1359. index cb0861744..478e8ef14 100644
  1360. --- a/grub-core/osdep/windows/relpath.c
  1361. +++ b/grub-core/osdep/windows/relpath.c
  1362. @@ -72,7 +72,7 @@ grub_make_system_path_relative_to_its_root (const char *path)
  1363. if (dirwindows[0] && dirwindows[1] == ':')
  1364. offset = 2;
  1365. }
  1366. - ret = xmalloc (sizeof (ret[0]) * (flen - offset + 2));
  1367. + ret = xcalloc (flen - offset + 2, sizeof (ret[0]));
  1368. if (dirwindows[offset] != '\\'
  1369. && dirwindows[offset] != '/'
  1370. && dirwindows[offset])
  1371. diff --git a/grub-core/partmap/gpt.c b/grub-core/partmap/gpt.c
  1372. index 103f6796f..72a2e37cd 100644
  1373. --- a/grub-core/partmap/gpt.c
  1374. +++ b/grub-core/partmap/gpt.c
  1375. @@ -199,7 +199,7 @@ gpt_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors,
  1376. *nsectors = ctx.len;
  1377. if (*nsectors > max_nsectors)
  1378. *nsectors = max_nsectors;
  1379. - *sectors = grub_malloc (*nsectors * sizeof (**sectors));
  1380. + *sectors = grub_calloc (*nsectors, sizeof (**sectors));
  1381. if (!*sectors)
  1382. return grub_errno;
  1383. for (i = 0; i < *nsectors; i++)
  1384. diff --git a/grub-core/partmap/msdos.c b/grub-core/partmap/msdos.c
  1385. index 7b8e45076..ee3f24982 100644
  1386. --- a/grub-core/partmap/msdos.c
  1387. +++ b/grub-core/partmap/msdos.c
  1388. @@ -337,7 +337,7 @@ pc_partition_map_embed (struct grub_disk *disk, unsigned int *nsectors,
  1389. avail_nsectors = *nsectors;
  1390. if (*nsectors > max_nsectors)
  1391. *nsectors = max_nsectors;
  1392. - *sectors = grub_malloc (*nsectors * sizeof (**sectors));
  1393. + *sectors = grub_calloc (*nsectors, sizeof (**sectors));
  1394. if (!*sectors)
  1395. return grub_errno;
  1396. for (i = 0; i < *nsectors; i++)
  1397. diff --git a/grub-core/script/execute.c b/grub-core/script/execute.c
  1398. index ee299fd0e..c8d6806fe 100644
  1399. --- a/grub-core/script/execute.c
  1400. +++ b/grub-core/script/execute.c
  1401. @@ -553,7 +553,7 @@ gettext_append (struct grub_script_argv *result, const char *orig_str)
  1402. for (iptr = orig_str; *iptr; iptr++)
  1403. if (*iptr == '$')
  1404. dollar_cnt++;
  1405. - ctx.allowed_strings = grub_malloc (sizeof (ctx.allowed_strings[0]) * dollar_cnt);
  1406. + ctx.allowed_strings = grub_calloc (dollar_cnt, sizeof (ctx.allowed_strings[0]));
  1407. if (parse_string (orig_str, gettext_save_allow, &ctx, 0))
  1408. goto fail;
  1409. diff --git a/grub-core/tests/fake_input.c b/grub-core/tests/fake_input.c
  1410. index 2d6085298..b5eb516be 100644
  1411. --- a/grub-core/tests/fake_input.c
  1412. +++ b/grub-core/tests/fake_input.c
  1413. @@ -49,7 +49,7 @@ grub_terminal_input_fake_sequence (int *seq_in, int nseq_in)
  1414. saved = grub_term_inputs;
  1415. if (seq)
  1416. grub_free (seq);
  1417. - seq = grub_malloc (nseq_in * sizeof (seq[0]));
  1418. + seq = grub_calloc (nseq_in, sizeof (seq[0]));
  1419. if (!seq)
  1420. return;
  1421. diff --git a/grub-core/tests/video_checksum.c b/grub-core/tests/video_checksum.c
  1422. index 74d5b65e5..44d081069 100644
  1423. --- a/grub-core/tests/video_checksum.c
  1424. +++ b/grub-core/tests/video_checksum.c
  1425. @@ -336,7 +336,7 @@ grub_video_capture_write_bmp (const char *fname,
  1426. {
  1427. case 4:
  1428. {
  1429. - grub_uint8_t *buffer = xmalloc (mode_info->width * 3);
  1430. + grub_uint8_t *buffer = xcalloc (3, mode_info->width);
  1431. grub_uint32_t rmask = ((1 << mode_info->red_mask_size) - 1);
  1432. grub_uint32_t gmask = ((1 << mode_info->green_mask_size) - 1);
  1433. grub_uint32_t bmask = ((1 << mode_info->blue_mask_size) - 1);
  1434. @@ -367,7 +367,7 @@ grub_video_capture_write_bmp (const char *fname,
  1435. }
  1436. case 3:
  1437. {
  1438. - grub_uint8_t *buffer = xmalloc (mode_info->width * 3);
  1439. + grub_uint8_t *buffer = xcalloc (3, mode_info->width);
  1440. grub_uint32_t rmask = ((1 << mode_info->red_mask_size) - 1);
  1441. grub_uint32_t gmask = ((1 << mode_info->green_mask_size) - 1);
  1442. grub_uint32_t bmask = ((1 << mode_info->blue_mask_size) - 1);
  1443. @@ -407,7 +407,7 @@ grub_video_capture_write_bmp (const char *fname,
  1444. }
  1445. case 2:
  1446. {
  1447. - grub_uint8_t *buffer = xmalloc (mode_info->width * 3);
  1448. + grub_uint8_t *buffer = xcalloc (3, mode_info->width);
  1449. grub_uint16_t rmask = ((1 << mode_info->red_mask_size) - 1);
  1450. grub_uint16_t gmask = ((1 << mode_info->green_mask_size) - 1);
  1451. grub_uint16_t bmask = ((1 << mode_info->blue_mask_size) - 1);
  1452. diff --git a/grub-core/video/capture.c b/grub-core/video/capture.c
  1453. index 4f83c7441..4d3195e01 100644
  1454. --- a/grub-core/video/capture.c
  1455. +++ b/grub-core/video/capture.c
  1456. @@ -89,7 +89,7 @@ grub_video_capture_start (const struct grub_video_mode_info *mode_info,
  1457. framebuffer.mode_info = *mode_info;
  1458. framebuffer.mode_info.blit_format = grub_video_get_blit_format (&framebuffer.mode_info);
  1459. - framebuffer.ptr = grub_malloc (framebuffer.mode_info.height * framebuffer.mode_info.pitch);
  1460. + framebuffer.ptr = grub_calloc (framebuffer.mode_info.height, framebuffer.mode_info.pitch);
  1461. if (!framebuffer.ptr)
  1462. return grub_errno;
  1463. diff --git a/grub-core/video/emu/sdl.c b/grub-core/video/emu/sdl.c
  1464. index a2f639f66..0ebab6f57 100644
  1465. --- a/grub-core/video/emu/sdl.c
  1466. +++ b/grub-core/video/emu/sdl.c
  1467. @@ -172,7 +172,7 @@ grub_video_sdl_set_palette (unsigned int start, unsigned int count,
  1468. if (start + count > mode_info.number_of_colors)
  1469. count = mode_info.number_of_colors - start;
  1470. - tmp = grub_malloc (count * sizeof (tmp[0]));
  1471. + tmp = grub_calloc (count, sizeof (tmp[0]));
  1472. for (i = 0; i < count; i++)
  1473. {
  1474. tmp[i].r = palette_data[i].r;
  1475. diff --git a/grub-core/video/i386/pc/vga.c b/grub-core/video/i386/pc/vga.c
  1476. index 01f47112d..b2f776c99 100644
  1477. --- a/grub-core/video/i386/pc/vga.c
  1478. +++ b/grub-core/video/i386/pc/vga.c
  1479. @@ -127,7 +127,7 @@ grub_video_vga_setup (unsigned int width, unsigned int height,
  1480. vga_height = height ? : 480;
  1481. - framebuffer.temporary_buffer = grub_malloc (vga_height * VGA_WIDTH);
  1482. + framebuffer.temporary_buffer = grub_calloc (vga_height, VGA_WIDTH);
  1483. framebuffer.front_page = 0;
  1484. framebuffer.back_page = 0;
  1485. if (!framebuffer.temporary_buffer)
  1486. diff --git a/grub-core/video/readers/png.c b/grub-core/video/readers/png.c
  1487. index 777e71334..61bd64537 100644
  1488. --- a/grub-core/video/readers/png.c
  1489. +++ b/grub-core/video/readers/png.c
  1490. @@ -309,7 +309,7 @@ grub_png_decode_image_header (struct grub_png_data *data)
  1491. if (data->is_16bit || data->is_gray || data->is_palette)
  1492. #endif
  1493. {
  1494. - data->image_data = grub_malloc (data->image_height * data->row_bytes);
  1495. + data->image_data = grub_calloc (data->image_height, data->row_bytes);
  1496. if (grub_errno)
  1497. return grub_errno;
  1498. diff --git a/include/grub/unicode.h b/include/grub/unicode.h
  1499. index a0403e91f..4de986a85 100644
  1500. --- a/include/grub/unicode.h
  1501. +++ b/include/grub/unicode.h
  1502. @@ -293,7 +293,7 @@ grub_unicode_glyph_dup (const struct grub_unicode_glyph *in)
  1503. grub_memcpy (out, in, sizeof (*in));
  1504. if (in->ncomb > ARRAY_SIZE (out->combining_inline))
  1505. {
  1506. - out->combining_ptr = grub_malloc (in->ncomb * sizeof (out->combining_ptr[0]));
  1507. + out->combining_ptr = grub_calloc (in->ncomb, sizeof (out->combining_ptr[0]));
  1508. if (!out->combining_ptr)
  1509. {
  1510. grub_free (out);
  1511. @@ -315,7 +315,7 @@ grub_unicode_set_glyph (struct grub_unicode_glyph *out,
  1512. grub_memcpy (out, in, sizeof (*in));
  1513. if (in->ncomb > ARRAY_SIZE (out->combining_inline))
  1514. {
  1515. - out->combining_ptr = grub_malloc (in->ncomb * sizeof (out->combining_ptr[0]));
  1516. + out->combining_ptr = grub_calloc (in->ncomb, sizeof (out->combining_ptr[0]));
  1517. if (!out->combining_ptr)
  1518. return;
  1519. grub_memcpy (out->combining_ptr, in->combining_ptr,
  1520. diff --git a/util/getroot.c b/util/getroot.c
  1521. index 847406fba..a5eaa64fd 100644
  1522. --- a/util/getroot.c
  1523. +++ b/util/getroot.c
  1524. @@ -200,7 +200,7 @@ make_device_name (const char *drive)
  1525. char *ret, *ptr;
  1526. const char *iptr;
  1527. - ret = xmalloc (strlen (drive) * 2);
  1528. + ret = xcalloc (2, strlen (drive));
  1529. ptr = ret;
  1530. for (iptr = drive; *iptr; iptr++)
  1531. {
  1532. diff --git a/util/grub-file.c b/util/grub-file.c
  1533. index 50c18b683..b2e7dd69f 100644
  1534. --- a/util/grub-file.c
  1535. +++ b/util/grub-file.c
  1536. @@ -54,7 +54,7 @@ main (int argc, char *argv[])
  1537. grub_util_host_init (&argc, &argv);
  1538. - argv2 = xmalloc (argc * sizeof (argv2[0]));
  1539. + argv2 = xcalloc (argc, sizeof (argv2[0]));
  1540. if (argc == 2 && strcmp (argv[1], "--version") == 0)
  1541. {
  1542. diff --git a/util/grub-fstest.c b/util/grub-fstest.c
  1543. index f14e02d97..57246af7c 100644
  1544. --- a/util/grub-fstest.c
  1545. +++ b/util/grub-fstest.c
  1546. @@ -650,7 +650,7 @@ argp_parser (int key, char *arg, struct argp_state *state)
  1547. if (args_count < num_disks)
  1548. {
  1549. if (args_count == 0)
  1550. - images = xmalloc (num_disks * sizeof (images[0]));
  1551. + images = xcalloc (num_disks, sizeof (images[0]));
  1552. images[args_count] = grub_canonicalize_file_name (arg);
  1553. args_count++;
  1554. return 0;
  1555. @@ -734,7 +734,7 @@ main (int argc, char *argv[])
  1556. grub_util_host_init (&argc, &argv);
  1557. - args = xmalloc (argc * sizeof (args[0]));
  1558. + args = xcalloc (argc, sizeof (args[0]));
  1559. argp_parse (&argp, argc, argv, 0, 0, 0);
  1560. diff --git a/util/grub-install-common.c b/util/grub-install-common.c
  1561. index ca0ac612a..0295d40f5 100644
  1562. --- a/util/grub-install-common.c
  1563. +++ b/util/grub-install-common.c
  1564. @@ -286,7 +286,7 @@ handle_install_list (struct install_list *il, const char *val,
  1565. il->n_entries++;
  1566. }
  1567. il->n_alloc = il->n_entries + 1;
  1568. - il->entries = xmalloc (il->n_alloc * sizeof (il->entries[0]));
  1569. + il->entries = xcalloc (il->n_alloc, sizeof (il->entries[0]));
  1570. ptr = val;
  1571. for (ce = il->entries; ; ce++)
  1572. {
  1573. diff --git a/util/grub-install.c b/util/grub-install.c
  1574. index 8a55ad4b8..a82725f29 100644
  1575. --- a/util/grub-install.c
  1576. +++ b/util/grub-install.c
  1577. @@ -626,7 +626,7 @@ device_map_check_duplicates (const char *dev_map)
  1578. if (! fp)
  1579. return;
  1580. - d = xmalloc (alloced * sizeof (d[0]));
  1581. + d = xcalloc (alloced, sizeof (d[0]));
  1582. while (fgets (buf, sizeof (buf), fp))
  1583. {
  1584. @@ -1260,7 +1260,7 @@ main (int argc, char *argv[])
  1585. ndev++;
  1586. }
  1587. - grub_drives = xmalloc (sizeof (grub_drives[0]) * (ndev + 1));
  1588. + grub_drives = xcalloc (ndev + 1, sizeof (grub_drives[0]));
  1589. for (curdev = grub_devices, curdrive = grub_drives; *curdev; curdev++,
  1590. curdrive++)
  1591. diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c
  1592. index bc087c2b5..d97d0e7be 100644
  1593. --- a/util/grub-mkimagexx.c
  1594. +++ b/util/grub-mkimagexx.c
  1595. @@ -2294,10 +2294,8 @@ SUFFIX (grub_mkimage_load_image) (const char *kernel_path,
  1596. + grub_host_to_target16 (e->e_shstrndx) * smd.section_entsize);
  1597. smd.strtab = (char *) e + grub_host_to_target_addr (s->sh_offset);
  1598. - smd.addrs = xmalloc (sizeof (*smd.addrs) * smd.num_sections);
  1599. - memset (smd.addrs, 0, sizeof (*smd.addrs) * smd.num_sections);
  1600. - smd.vaddrs = xmalloc (sizeof (*smd.vaddrs) * smd.num_sections);
  1601. - memset (smd.vaddrs, 0, sizeof (*smd.vaddrs) * smd.num_sections);
  1602. + smd.addrs = xcalloc (smd.num_sections, sizeof (*smd.addrs));
  1603. + smd.vaddrs = xcalloc (smd.num_sections, sizeof (*smd.vaddrs));
  1604. SUFFIX (locate_sections) (e, kernel_path, &smd, layout, image_target);
  1605. diff --git a/util/grub-mkrescue.c b/util/grub-mkrescue.c
  1606. index ce2cbc4f1..51831027f 100644
  1607. --- a/util/grub-mkrescue.c
  1608. +++ b/util/grub-mkrescue.c
  1609. @@ -441,8 +441,8 @@ main (int argc, char *argv[])
  1610. xorriso = xstrdup ("xorriso");
  1611. label_font = grub_util_path_concat (2, pkgdatadir, "unicode.pf2");
  1612. - argp_argv = xmalloc (sizeof (argp_argv[0]) * argc);
  1613. - xorriso_tail_argv = xmalloc (sizeof (argp_argv[0]) * argc);
  1614. + argp_argv = xcalloc (argc, sizeof (argp_argv[0]));
  1615. + xorriso_tail_argv = xcalloc (argc, sizeof (argp_argv[0]));
  1616. xorriso_tail_argc = 0;
  1617. /* Program name */
  1618. diff --git a/util/grub-mkstandalone.c b/util/grub-mkstandalone.c
  1619. index 4907d44c0..edf309717 100644
  1620. --- a/util/grub-mkstandalone.c
  1621. +++ b/util/grub-mkstandalone.c
  1622. @@ -296,7 +296,7 @@ main (int argc, char *argv[])
  1623. grub_util_host_init (&argc, &argv);
  1624. grub_util_disable_fd_syncs ();
  1625. - files = xmalloc ((argc + 1) * sizeof (files[0]));
  1626. + files = xcalloc (argc + 1, sizeof (files[0]));
  1627. argp_parse (&argp, argc, argv, 0, 0, 0);
  1628. diff --git a/util/grub-pe2elf.c b/util/grub-pe2elf.c
  1629. index 0d4084a10..11331294f 100644
  1630. --- a/util/grub-pe2elf.c
  1631. +++ b/util/grub-pe2elf.c
  1632. @@ -100,9 +100,9 @@ write_section_data (FILE* fp, const char *name, char *image,
  1633. char *pe_strtab = (image + pe_chdr->symtab_offset
  1634. + pe_chdr->num_symbols * sizeof (struct grub_pe32_symbol));
  1635. - section_map = xmalloc ((2 * pe_chdr->num_sections + 5) * sizeof (int));
  1636. + section_map = xcalloc (2 * pe_chdr->num_sections + 5, sizeof (int));
  1637. section_map[0] = 0;
  1638. - shdr = xmalloc ((2 * pe_chdr->num_sections + 5) * sizeof (shdr[0]));
  1639. + shdr = xcalloc (2 * pe_chdr->num_sections + 5, sizeof (shdr[0]));
  1640. idx = 1;
  1641. idx_reloc = pe_chdr->num_sections + 1;
  1642. @@ -233,7 +233,7 @@ write_reloc_section (FILE* fp, const char *name, char *image,
  1643. pe_sec = pe_shdr + shdr[i].sh_link;
  1644. pe_rel = (struct grub_pe32_reloc *) (image + pe_sec->relocations_offset);
  1645. - rel = (elf_reloc_t *) xmalloc (pe_sec->num_relocations * sizeof (elf_reloc_t));
  1646. + rel = (elf_reloc_t *) xcalloc (pe_sec->num_relocations, sizeof (elf_reloc_t));
  1647. num_rels = 0;
  1648. modified = 0;
  1649. @@ -365,12 +365,10 @@ write_symbol_table (FILE* fp, const char *name, char *image,
  1650. pe_symtab = (struct grub_pe32_symbol *) (image + pe_chdr->symtab_offset);
  1651. pe_strtab = (char *) (pe_symtab + pe_chdr->num_symbols);
  1652. - symtab = (Elf_Sym *) xmalloc ((pe_chdr->num_symbols + 1) *
  1653. - sizeof (Elf_Sym));
  1654. - memset (symtab, 0, (pe_chdr->num_symbols + 1) * sizeof (Elf_Sym));
  1655. + symtab = (Elf_Sym *) xcalloc (pe_chdr->num_symbols + 1, sizeof (Elf_Sym));
  1656. num_syms = 1;
  1657. - symtab_map = (int *) xmalloc (pe_chdr->num_symbols * sizeof (int));
  1658. + symtab_map = (int *) xcalloc (pe_chdr->num_symbols, sizeof (int));
  1659. for (i = 0; i < (int) pe_chdr->num_symbols;
  1660. i += pe_symtab->num_aux + 1, pe_symtab += pe_symtab->num_aux + 1)
  1661. diff --git a/util/grub-probe.c b/util/grub-probe.c
  1662. index 81d27eead..cbe6ed94c 100644
  1663. --- a/util/grub-probe.c
  1664. +++ b/util/grub-probe.c
  1665. @@ -361,8 +361,8 @@ probe (const char *path, char **device_names, char delim)
  1666. grub_util_pull_device (*curdev);
  1667. ndev++;
  1668. }
  1669. -
  1670. - drives_names = xmalloc (sizeof (drives_names[0]) * (ndev + 1));
  1671. +
  1672. + drives_names = xcalloc (ndev + 1, sizeof (drives_names[0]));
  1673. for (curdev = device_names, curdrive = drives_names; *curdev; curdev++,
  1674. curdrive++)
  1675. --
  1676. 2.26.2