Don't define large array on local stack.
PATCH 1/1 Don't define large array on local stack.
On nommu arch, local stack size is very limited and can't be enlarged on demand. So, don't define large array on local stack.
Signed-off-by Sonic Zhang <[email protected]>
src/libubigen.c +18 -5
@@ -287,7 +287,7 @@ {int ret;struct ubigen_vol_info vi; -char outbuf[ui->peb_size]; +char *outbuf;struct ubi_vid_hdr *vid_hdr;off_t seek;
@@ -302,6 +302,9 @@ vi.name_len =strlen (UBI_LAYOUT_VOLUME_NAME ); vi.compat =UBI_LAYOUT_VOLUME_COMPAT ; +if ((outbuf =malloc (ui->peb_size)) ==NULL ) +return sys_errmsg ("fail to malloc outbuf" ); +memset (outbuf,0xFF , ui->data_offs); vid_hdr = (struct ubi_vid_hdr *)(&outbuf[ui->vid_hdr_offs]);memcpy (outbuf + ui->data_offs, vtbl, ui->vtbl_size);
@@ -309,22 +312,32 @@ ui->peb_size - ui->data_offs - ui->vtbl_size); seek = peb1 * ui->peb_size; -if (lseek (fd, seek,SEEK_SET ) != seek) +if (lseek (fd, seek,SEEK_SET ) != seek) { +free (outbuf);return sys_errmsg ("cannot seek output file" ); + } +ubigen_init_ec_hdr (ui, (struct ubi_ec_hdr *)outbuf, ec1);init_vid_hdr (ui, &vi, vid_hdr,0 ,NULL ,0 ); ret =write (fd, outbuf, ui->peb_size); -if (ret != ui->peb_size) +if (ret != ui->peb_size) { +free (outbuf);return sys_errmsg ("cannot write %d bytes" , ui->peb_size); + } seek = peb2 * ui->peb_size; -if (lseek (fd, seek,SEEK_SET ) != seek) +if (lseek (fd, seek,SEEK_SET ) != seek) { +free (outbuf);return sys_errmsg ("cannot seek output file" ); + }ubigen_init_ec_hdr (ui, (struct ubi_ec_hdr *)outbuf, ec2);init_vid_hdr (ui, &vi, vid_hdr,1 ,NULL ,0 ); ret =write (fd, outbuf, ui->peb_size); -if (ret != ui->peb_size) +if (ret != ui->peb_size) { +free (outbuf);return sys_errmsg ("cannot write %d bytes" , ui->peb_size); + } +free (outbuf);return 0 ; }
Quoted 3 lines · sonic zhang
On nommu arch, local stack size is very limited and can't be enlarged on demand. So, don't define large array on local stack.
Signed-off-by Sonic Zhang <[email protected]>
Well, this was not a proper patch applicable by git-am. But I amended it and applied. Also I changed the patch a little to make it nicer.
Thank you!
Signature · 2 lines
Best regards, Artem Bityutskiy (Битюцкий Артём)