Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 183207
Collapse All | Expand All

(-)linux-2.6-git/fs/ext3/namei.c (-5 / +28 lines)
Lines 379-391 dx_probe(struct dentry *dentry, struct i Link Here
379
379
380
	entries = (struct dx_entry *) (((char *)&root->info) +
380
	entries = (struct dx_entry *) (((char *)&root->info) +
381
				       root->info.info_length);
381
				       root->info.info_length);
382
	assert(dx_get_limit(entries) == dx_root_limit(dir,
382
	if (dx_get_limit(entries) != dx_root_limit(dir,
383
						      root->info.info_length));
383
						      root->info.info_length)) {
384
		ext3_warning(dir->i_sb, __FUNCTION__, "Invalid dx limit");
385
		brelse(bh);
386
		*err = ERR_BAD_DX_DIR;
387
		goto fail;
388
	}
389
384
	dxtrace (printk("Look up %x", hash));
390
	dxtrace (printk("Look up %x", hash));
385
	while (1)
391
	while (1)
386
	{
392
	{
387
		count = dx_get_count(entries);
393
		count = dx_get_count(entries);
388
		assert (count && count <= dx_get_limit(entries));
394
		if (!count || count > dx_get_limit(entries)) {
395
			ext3_warning(dir->i_sb, __FUNCTION__,
396
				      "Invalid dx count");
397
			brelse(bh);
398
			*err = ERR_BAD_DX_DIR;
399
			goto fail2;
400
		}
389
		p = entries + 1;
401
		p = entries + 1;
390
		q = entries + count - 1;
402
		q = entries + count - 1;
391
		while (p <= q)
403
		while (p <= q)
Lines 411-417 dx_probe(struct dentry *dentry, struct i Link Here
411
					break;
423
					break;
412
				}
424
				}
413
			}
425
			}
414
			assert (at == p - 1);
426
			if (at != p - 1) {
427
				brelse(bh);
428
				*err = ERR_BAD_DX_DIR;
429
				goto fail2;
430
			}
415
		}
431
		}
416
432
417
		at = p - 1;
433
		at = p - 1;
Lines 423-430 dx_probe(struct dentry *dentry, struct i Link Here
423
		if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0, err)))
439
		if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0, err)))
424
			goto fail2;
440
			goto fail2;
425
		at = entries = ((struct dx_node *) bh->b_data)->entries;
441
		at = entries = ((struct dx_node *) bh->b_data)->entries;
426
		assert (dx_get_limit(entries) == dx_node_limit (dir));
442
		if (dx_get_limit(entries) != dx_node_limit (dir)) {
443
			ext3_warning(dir->i_sb, __FUNCTION__,
444
				      "Invalid dx limit");
445
			brelse(bh);
446
			*err = ERR_BAD_DX_DIR;
447
			goto fail2;
448
		}
427
		frame++;
449
		frame++;
450
		frame->bh = NULL;
428
	}
451
	}
429
fail2:
452
fail2:
430
	while (frame >= frame_in) {
453
	while (frame >= frame_in) {

Return to bug 183207