lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20140602145959.7E669C426F6@trevor.secretlab.ca>
Date:	Mon, 02 Jun 2014 15:59:54 +0100
From:	Grant Likely <grant.likely@...aro.org>
To:	Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com>
Cc:	robh+dt@...nel.org, devicetree@...r.kernel.org,
	linux-kernel@...r.kernel.org,
	Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com>
Subject: Re: [PATCH] of/base: Replace alias if it already exists

On Sun,  1 Jun 2014 15:01:23 +0300, Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com> wrote:
> The current code unconditionally adds aliases without check if it already
> exists, so it is not possible to alter an alias, from board DT file for
> example. Fix that by replacing an alias if it already exists
> 

Can you describe a more detailed use-case for altering an alias?

g.

> Signed-off-by: Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com>
> ---
>  drivers/of/base.c |   34 +++++++++++++++++++++++++++-------
>  1 file changed, 27 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/of/base.c b/drivers/of/base.c
> index 03e7fc6..99215f0 100644
> --- a/drivers/of/base.c
> +++ b/drivers/of/base.c
> @@ -2036,6 +2036,23 @@ static void of_alias_add(struct alias_prop *ap, struct device_node *np,
>  		 ap->alias, ap->stem, ap->id, of_node_full_name(np));
>  }
>  
> +static int of_alias_replace(struct device_node *np, int id, const char *stem,
> +			    int stem_len)
> +{
> +	struct alias_prop *ap;
> +
> +	list_for_each_entry(ap, &aliases_lookup, link) {
> +		if (strncmp(ap->stem, stem, stem_len))
> +			continue;
> +
> +		if (np == ap->np) {
> +			ap->id = id;
> +			return 0;
> +		}
> +	}
> +
> +	return -ENODEV;
> +}
>  /**
>   * of_alias_scan - Scan all properties of 'aliases' node
>   *
> @@ -2092,13 +2109,16 @@ void of_alias_scan(void * (*dt_alloc)(u64 size, u64 align))
>  		if (kstrtoint(end, 10, &id) < 0)
>  			continue;
>  
> -		/* Allocate an alias_prop with enough space for the stem */
> -		ap = dt_alloc(sizeof(*ap) + len + 1, 4);
> -		if (!ap)
> -			continue;
> -		memset(ap, 0, sizeof(*ap) + len + 1);
> -		ap->alias = start;
> -		of_alias_add(ap, np, id, start, len);
> +		if (of_alias_replace(np, id, start, len)) {
> +			/* Allocate an alias_prop with enough space for the stem
> +			 */
> +			ap = dt_alloc(sizeof(*ap) + len + 1, 4);
> +			if (!ap)
> +				continue;
> +			memset(ap, 0, sizeof(*ap) + len + 1);
> +			ap->alias = start;
> +			of_alias_add(ap, np, id, start, len);
> +		}
>  	}
>  }
>  
> -- 
> 1.7.9.5
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ