[Devel] [vzlin-dev] [RH7 PATCH 1/2] port diff-ext4-in-containers-treat-panic_on_errors-as-remount-ro_on_errors

Dmitry Monakhov dmonakhov at openvz.org
Wed Jun 10 02:36:24 PDT 2015


Konstantin Khorenko <khorenko at virtuozzo.com> writes:

> Dima,
>
> 1) why do we need this patch now?
AFAIU primary usage for this pathes is second ploop. Am I right?
>
> Currently we have devmnt->allowed_options options which are configured via userspace and currently vzctl provides empty list.
> So how it's possible that error=panic option workarounds this check?
Ok. If this is true. This patch is noop for (a) case. but we steel need
it for (b) 
> 2) if the patch is still needed, then why 2 places are required:
>    a) handle_mount_opt()
>    b) ext4_fill_super() - can it be called without previously calling handle_mount_opt() ?
      Second one reads options directly from disk. User can modifiy it
      via tune2fs $DEV (dev should be accessiable for write inside CT)
>
>
>
> Original patch comment:
>
> Author: Konstantin Khlebnikov
> Email: khlebnikov at openvz.org
> Subject: ext4: in containers treat errors=panic as
> Date: Fri, 01 Mar 2013 17:08:48 +0400
>
> Container can explode whole node if it remounts its ploop
> with option 'errors=panic' and triggers abort after that.
>
> Signed-off-by: Konstantin Khlebnikov <khlebnikov at openvz.org>
> Acked-by: Maxim V. Patlasov <mpatlasov at parallels.com>
>
> --
> Best regards,
>
> Konstantin Khorenko,
> Virtuozzo Linux Kernel Team
>
> On 06/07/2015 09:20 PM, Dmitry Monakhov wrote:
>> 
>> Signed-off-by: Dmitry Monakhov <dmonakhov at openvz.org>
>> ---
>>  fs/ext4/super.c |   14 +++++++++++---
>>  1 files changed, 11 insertions(+), 3 deletions(-)
>> 
>> diff --git a/fs/ext4/super.c b/fs/ext4/super.c
>> index cbcc684..1ce2932 100644
>> --- a/fs/ext4/super.c
>> +++ b/fs/ext4/super.c
>> @@ -1366,6 +1366,7 @@ static int clear_qf_name(struct super_block *sb, int qtype)
>>  #define MOPT_NO_EXT2	0x0100
>>  #define MOPT_NO_EXT3	0x0200
>>  #define MOPT_EXT4_ONLY	(MOPT_NO_EXT2 | MOPT_NO_EXT3)
>> +#define MOPT_WANT_SYS_ADMIN	0x0400
>>  
>>  static const struct mount_opts {
>>  	int	token;
>> @@ -1394,7 +1395,7 @@ static const struct mount_opts {
>>  				    EXT4_MOUNT_JOURNAL_CHECKSUM),
>>  	 MOPT_EXT4_ONLY | MOPT_SET},
>>  	{Opt_noload, EXT4_MOUNT_NOLOAD, MOPT_NO_EXT2 | MOPT_SET},
>> -	{Opt_err_panic, EXT4_MOUNT_ERRORS_PANIC, MOPT_SET | MOPT_CLEAR_ERR},
>> +	{Opt_err_panic, EXT4_MOUNT_ERRORS_PANIC, MOPT_SET | MOPT_CLEAR_ERR|MOPT_WANT_SYS_ADMIN},
>>  	{Opt_err_ro, EXT4_MOUNT_ERRORS_RO, MOPT_SET | MOPT_CLEAR_ERR},
>>  	{Opt_err_cont, EXT4_MOUNT_ERRORS_CONT, MOPT_SET | MOPT_CLEAR_ERR},
>>  	{Opt_data_err_abort, EXT4_MOUNT_DATA_ERR_ABORT,
>> @@ -1535,6 +1536,9 @@ static int handle_mount_opt(struct super_block *sb, char *opt, int token,
>>  		set_opt2(sb, EXPLICIT_DELALLOC);
>>  	if (m->flags & MOPT_CLEAR_ERR)
>>  		clear_opt(sb, ERRORS_MASK);
>> +	if (m->flags & MOPT_WANT_SYS_ADMIN && !capable(CAP_SYS_ADMIN))
>> +		return 1;
>> +
>>  	if (token == Opt_noquota && sb_any_quota_loaded(sb)) {
>>  		ext4_msg(sb, KERN_ERR, "Cannot change quota "
>>  			 "options when quota turned on");
>> @@ -3575,8 +3579,12 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
>>  	else if ((def_mount_opts & EXT4_DEFM_JMODE) == EXT4_DEFM_JMODE_WBACK)
>>  		set_opt(sb, WRITEBACK_DATA);
>>  
>> -	if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC)
>> -		set_opt(sb, ERRORS_PANIC);
>> +	if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_PANIC) {
>> +		if (capable(CAP_SYS_ADMIN))
>> +			set_opt(sb, ERRORS_PANIC);
>> +		else
>> +			set_opt(sb, ERRORS_RO);
>> +	}
>>  	else if (le16_to_cpu(sbi->s_es->s_errors) == EXT4_ERRORS_CONTINUE)
>>  		set_opt(sb, ERRORS_CONT);
>>  	else
>> 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 472 bytes
Desc: not available
URL: <http://lists.openvz.org/pipermail/devel/attachments/20150610/da33b786/attachment-0001.sig>


More information about the Devel mailing list