Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 95027b5 in mainline


Ignore:
Timestamp:
2013-09-12T08:24:53Z (8 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master
Children:
4a5f2b0, b5ba8f6
Parents:
3a0a4d8
Message:

mfs: fix potential memory leak in case of a read error.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/mfs/mfs_rw.c

    r3a0a4d8 r95027b5  
    104104    bool write_mode, uint32_t w_block)
    105105{
    106         int r, nr_direct;
     106        int nr_direct;
    107107        int ptrs_per_block;
    108         uint32_t *ind_zone, *ind2_zone;
     108        uint32_t *ind_zone = NULL, *ind2_zone = NULL;
     109        int r = EOK;
    109110
    110111        struct mfs_ino_info *ino_i = mnode->ino_i;
     
    130131                        ino_i->dirty = true;
    131132                }
    132                 return EOK;
     133                goto out;
    133134        }
    134135
     
    142143                                r = alloc_zone_and_clear(inst, &zone);
    143144                                if (r != EOK)
    144                                         return r;
     145                                        goto out;
    145146
    146147                                ino_i->i_izone[0] = zone;
     
    149150                                /* Sparse block */
    150151                                *b = 0;
    151                                 return EOK;
     152                                goto out;
    152153                        }
    153154                }
     
    155156                r = read_ind_zone(inst, ino_i->i_izone[0], &ind_zone);
    156157                if (r != EOK)
    157                         return r;
     158                        goto out;
    158159
    159160                *b = ind_zone[rblock];
     
    163164                }
    164165
    165                 goto out_free_ind1;
     166                goto out;
    166167        }
    167168
     
    176177                        r = alloc_zone_and_clear(inst, &zone);
    177178                        if (r != EOK)
    178                                 return r;
     179                                goto out;
    179180
    180181                        ino_i->i_izone[1] = zone;
     
    183184                        /* Sparse block */
    184185                        *b = 0;
    185                         return EOK;
     186                        goto out;
    186187                }
    187188        }
     
    189190        r = read_ind_zone(inst, ino_i->i_izone[1], &ind_zone);
    190191        if (r != EOK)
    191                 return r;
     192                goto out;
    192193
    193194        /*
     
    203204                        r = alloc_zone_and_clear(inst, &zone);
    204205                        if (r != EOK)
    205                                 goto out_free_ind1;
     206                                goto out;
    206207
    207208                        ind_zone[ind2_off] = zone;
     
    209210                } else {
    210211                        /* Sparse block */
    211                         r = EOK;
    212212                        *b = 0;
    213                         goto out_free_ind1;
     213                        goto out;
    214214                }
    215215        }
     
    217217        r = read_ind_zone(inst, ind_zone[ind2_off], &ind2_zone);
    218218        if (r != EOK)
    219                 goto out_free_ind1;
     219                goto out;
    220220
    221221        *b = ind2_zone[rblock - (ind2_off * ptrs_per_block)];
     
    225225        }
    226226
    227         r = EOK;
    228 
     227out:
    229228        free(ind2_zone);
    230 out_free_ind1:
    231229        free(ind_zone);
    232230        return r;
Note: See TracChangeset for help on using the changeset viewer.