@@ -195,10 +195,8 @@ static ssize_t ntfs_list_ea(struct ntfs_inode *ni, char *buffer,
195
195
{
196
196
const struct EA_INFO * info ;
197
197
struct EA_FULL * ea_all = NULL ;
198
- const struct EA_FULL * ea ;
199
198
u32 off , size ;
200
199
int err ;
201
- int ea_size ;
202
200
size_t ret ;
203
201
204
202
err = ntfs_read_ea (ni , & ea_all , 0 , & info );
@@ -212,16 +210,18 @@ static ssize_t ntfs_list_ea(struct ntfs_inode *ni, char *buffer,
212
210
213
211
/* Enumerate all xattrs. */
214
212
ret = 0 ;
215
- for (off = 0 ; off + sizeof (struct EA_FULL ) < size ; off += ea_size ) {
216
- ea = Add2Ptr (ea_all , off );
217
- ea_size = unpacked_ea_size (ea );
213
+ off = 0 ;
214
+ while (off + sizeof (struct EA_FULL ) < size ) {
215
+ const struct EA_FULL * ea = Add2Ptr (ea_all , off );
216
+ int ea_size = unpacked_ea_size (ea );
217
+ u8 name_len = ea -> name_len ;
218
218
219
- if (!ea -> name_len )
219
+ if (!name_len )
220
220
break ;
221
221
222
- if (ea -> name_len > ea_size ) {
222
+ if (name_len > ea_size ) {
223
223
ntfs_set_state (ni -> mi .sbi , NTFS_DIRTY_ERROR );
224
- err = - EINVAL ; /* corrupted fs */
224
+ err = - EINVAL ; /* corrupted fs. */
225
225
break ;
226
226
}
227
227
@@ -230,16 +230,17 @@ static ssize_t ntfs_list_ea(struct ntfs_inode *ni, char *buffer,
230
230
if (off + ea_size > size )
231
231
break ;
232
232
233
- if (ret + ea -> name_len + 1 > bytes_per_buffer ) {
233
+ if (ret + name_len + 1 > bytes_per_buffer ) {
234
234
err = - ERANGE ;
235
235
goto out ;
236
236
}
237
237
238
- memcpy (buffer + ret , ea -> name , ea -> name_len );
239
- buffer [ret + ea -> name_len ] = 0 ;
238
+ memcpy (buffer + ret , ea -> name , name_len );
239
+ buffer [ret + name_len ] = 0 ;
240
240
}
241
241
242
- ret += ea -> name_len + 1 ;
242
+ ret += name_len + 1 ;
243
+ off += ea_size ;
243
244
}
244
245
245
246
out :
0 commit comments