plug memory leaks and fix nested loops in udf_find_partmaps()
Scott Long
scottl at samsco.org
Mon Jun 26 03:43:50 UTC 2006
Thanks for this, I'll look at committing it right now.
Scott
Pedro Martelletto wrote:
> currently, there are two nested 'for' loops in udf_find_partmaps() which
> use the same control variable (i), as well as memory leaks in two error
> paths, which the following diff should fix.
>
> -p.
>
> Index: udf_vfsops.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/fs/udf/udf_vfsops.c,v
> retrieving revision 1.41
> diff -u -p -r1.41 udf_vfsops.c
> --- udf_vfsops.c 26 May 2006 01:21:51 -0000 1.41
> +++ udf_vfsops.c 22 Jun 2006 15:08:25 -0000
> @@ -728,7 +728,7 @@ udf_find_partmaps(struct udf_mnt *udfmp,
> struct regid *pmap_id;
> struct buf *bp;
> unsigned char regid_id[UDF_REGID_ID_SIZE + 1];
> - int i, ptype, psize, error;
> + int i, k, ptype, psize, error;
>
> for (i = 0; i < le32toh(lvd->n_pm); i++) {
> pmap = (union udf_pmap *)&lvd->maps[i * UDF_PMAP_SIZE];
> @@ -776,6 +776,7 @@ udf_find_partmaps(struct udf_mnt *udfmp,
> brelse(bp);
> printf("Failed to read Sparing Table at sector %d\n",
> le32toh(pms->st_loc[0]));
> + FREE(udfmp->s_table, M_UDFMOUNT);
> return (error);
> }
> bcopy(bp->b_data, udfmp->s_table, le32toh(pms->st_size));
> @@ -783,15 +784,16 @@ udf_find_partmaps(struct udf_mnt *udfmp,
>
> if (udf_checktag(&udfmp->s_table->tag, 0)) {
> printf("Invalid sparing table found\n");
> + FREE(udfmp->s_table, M_UDFMOUNT);
> return (EINVAL);
> }
>
> /* See how many valid entries there are here. The list is
> * supposed to be sorted. 0xfffffff0 and higher are not valid
> */
> - for (i = 0; i < le16toh(udfmp->s_table->rt_l); i++) {
> - udfmp->s_table_entries = i;
> - if (le32toh(udfmp->s_table->entries[i].org) >=
> + for (k = 0; k < le16toh(udfmp->s_table->rt_l); k++) {
> + udfmp->s_table_entries = k;
> + if (le32toh(udfmp->s_table->entries[k].org) >=
> 0xfffffff0)
> break;
> }
> _______________________________________________
> freebsd-fs at freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-fs
> To unsubscribe, send any mail to "freebsd-fs-unsubscribe at freebsd.org"
More information about the freebsd-fs
mailing list