All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Daney <ddaney@caviumnetworks.com>
To: David Daney <ddaney.cavm@gmail.com>
Cc: <linux-mips@linux-mips.org>, <ralf@linux-mips.org>,
	Jiang Liu <liuj97@gmail.com>, <eunb.song@samsung.com>,
	<linux-kernel@vger.kernel.org>,
	David Daney <david.daney@cavium.com>
Subject: Re: [PATCH] MIPS: Make virt_to_phys() work for all unmapped addresses.
Date: Tue, 7 May 2013 10:58:19 -0700	[thread overview]
Message-ID: <518940BB.3080307@caviumnetworks.com> (raw)
In-Reply-To: <1367947427-21649-1-git-send-email-ddaney.cavm@gmail.com>

It doesn't apply anymore.  It was against v3.4.

I will send one against Linus' tree soon.

David Daney


On 05/07/2013 10:23 AM, David Daney wrote:
> From: David Daney <david.daney@cavium.com>
>
> As reported:
>    This problem was discovered when doing BGP traffic with the TCP MD5 option
>    activated, where the following call chain caused a crash:
>
>     * tcp_v4_rcv
>     *  tcp_v4_timewait_ack
>     *   tcp_v4_send_ack -> follow stack variable rep.th
>     *    tcp_v4_md5_hash_hdr
>     *     tcp_md5_hash_header
>     *      sg_init_one
>     *       sg_set_buf
>     *        virt_to_page
>
>    I noticed that tcp_v4_send_reset uses a similar stack variable and
>    also calls tcp_v4_md5_hash_hdr, so it has the same problem.
>
> The networking core can indirectly call virt_to_phys() on stack
> addresses, if this is done from PID 0, the stack will usually be in
> CKSEG0, so virt_to_phys() needs to work there as well
>
> Signed-off-by: David Daney <david.daney@cavium.com>
> ---
>
> Not tested against kernel.org kernel, but it may still apply
>
> This could also fix problems noted by Eunbong Song with the
> free_initmem_default() call.
>
>   arch/mips/include/asm/io.h   | 2 +-
>   arch/mips/include/asm/page.h | 5 +++--
>   2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
> index a58f229..37fa957 100644
> --- a/arch/mips/include/asm/io.h
> +++ b/arch/mips/include/asm/io.h
> @@ -116,7 +116,7 @@ static inline void set_io_port_base(unsigned long base)
>    */
>   static inline unsigned long virt_to_phys(volatile const void *address)
>   {
> -	return (unsigned long)address - PAGE_OFFSET + PHYS_OFFSET;
> +	return __pa(address);
>   }
>
>   /*
> diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h
> index cee3893..e09bff9 100644
> --- a/arch/mips/include/asm/page.h
> +++ b/arch/mips/include/asm/page.h
> @@ -48,7 +48,6 @@
>   #ifndef __ASSEMBLY__
>
>   #include <linux/pfn.h>
> -#include <asm/io.h>
>
>   extern void build_clear_page(void);
>   extern void build_copy_page(void);
> @@ -139,7 +138,6 @@ typedef struct { unsigned long pgprot; } pgprot_t;
>    */
>   #define ptep_buddy(x)	((pte_t *)((unsigned long)(x) ^ sizeof(pte_t)))
>
> -#endif /* !__ASSEMBLY__ */
>
>   /*
>    * __pa()/__va() should be used only during mem init.
> @@ -156,6 +154,9 @@ typedef struct { unsigned long pgprot; } pgprot_t;
>   #endif
>   #define __va(x)		((void *)((unsigned long)(x) + PAGE_OFFSET - PHYS_OFFSET))
>
> +#include <asm/io.h>
> +#endif /* !__ASSEMBLY__ */
> +
>   /*
>    * RELOC_HIDE was originally added by 6007b903dfe5f1d13e0c711ac2894bdd4a61b1ad
>    * (lmo) rsp. 8431fd094d625b94d364fe393076ccef88e6ce18 (kernel.org).  The
>

WARNING: multiple messages have this Message-ID (diff)
From: David Daney <ddaney@caviumnetworks.com>
To: David Daney <ddaney.cavm@gmail.com>
Cc: linux-mips@linux-mips.org, ralf@linux-mips.org,
	Jiang Liu <liuj97@gmail.com>,
	eunb.song@samsung.com, linux-kernel@vger.kernel.org,
	David Daney <david.daney@cavium.com>
Subject: Re: [PATCH] MIPS: Make virt_to_phys() work for all unmapped addresses.
Date: Tue, 7 May 2013 10:58:19 -0700	[thread overview]
Message-ID: <518940BB.3080307@caviumnetworks.com> (raw)
Message-ID: <20130507175819.pLGT8gS54uininM8EYkCdMi91aVN3v7irUbWOJFZcmE@z> (raw)
In-Reply-To: <1367947427-21649-1-git-send-email-ddaney.cavm@gmail.com>

It doesn't apply anymore.  It was against v3.4.

I will send one against Linus' tree soon.

David Daney


On 05/07/2013 10:23 AM, David Daney wrote:
> From: David Daney <david.daney@cavium.com>
>
> As reported:
>    This problem was discovered when doing BGP traffic with the TCP MD5 option
>    activated, where the following call chain caused a crash:
>
>     * tcp_v4_rcv
>     *  tcp_v4_timewait_ack
>     *   tcp_v4_send_ack -> follow stack variable rep.th
>     *    tcp_v4_md5_hash_hdr
>     *     tcp_md5_hash_header
>     *      sg_init_one
>     *       sg_set_buf
>     *        virt_to_page
>
>    I noticed that tcp_v4_send_reset uses a similar stack variable and
>    also calls tcp_v4_md5_hash_hdr, so it has the same problem.
>
> The networking core can indirectly call virt_to_phys() on stack
> addresses, if this is done from PID 0, the stack will usually be in
> CKSEG0, so virt_to_phys() needs to work there as well
>
> Signed-off-by: David Daney <david.daney@cavium.com>
> ---
>
> Not tested against kernel.org kernel, but it may still apply
>
> This could also fix problems noted by Eunbong Song with the
> free_initmem_default() call.
>
>   arch/mips/include/asm/io.h   | 2 +-
>   arch/mips/include/asm/page.h | 5 +++--
>   2 files changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/arch/mips/include/asm/io.h b/arch/mips/include/asm/io.h
> index a58f229..37fa957 100644
> --- a/arch/mips/include/asm/io.h
> +++ b/arch/mips/include/asm/io.h
> @@ -116,7 +116,7 @@ static inline void set_io_port_base(unsigned long base)
>    */
>   static inline unsigned long virt_to_phys(volatile const void *address)
>   {
> -	return (unsigned long)address - PAGE_OFFSET + PHYS_OFFSET;
> +	return __pa(address);
>   }
>
>   /*
> diff --git a/arch/mips/include/asm/page.h b/arch/mips/include/asm/page.h
> index cee3893..e09bff9 100644
> --- a/arch/mips/include/asm/page.h
> +++ b/arch/mips/include/asm/page.h
> @@ -48,7 +48,6 @@
>   #ifndef __ASSEMBLY__
>
>   #include <linux/pfn.h>
> -#include <asm/io.h>
>
>   extern void build_clear_page(void);
>   extern void build_copy_page(void);
> @@ -139,7 +138,6 @@ typedef struct { unsigned long pgprot; } pgprot_t;
>    */
>   #define ptep_buddy(x)	((pte_t *)((unsigned long)(x) ^ sizeof(pte_t)))
>
> -#endif /* !__ASSEMBLY__ */
>
>   /*
>    * __pa()/__va() should be used only during mem init.
> @@ -156,6 +154,9 @@ typedef struct { unsigned long pgprot; } pgprot_t;
>   #endif
>   #define __va(x)		((void *)((unsigned long)(x) + PAGE_OFFSET - PHYS_OFFSET))
>
> +#include <asm/io.h>
> +#endif /* !__ASSEMBLY__ */
> +
>   /*
>    * RELOC_HIDE was originally added by 6007b903dfe5f1d13e0c711ac2894bdd4a61b1ad
>    * (lmo) rsp. 8431fd094d625b94d364fe393076ccef88e6ce18 (kernel.org).  The
>

  reply	other threads:[~2013-05-07 17:58 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-05-07 17:23 [PATCH] MIPS: Make virt_to_phys() work for all unmapped addresses David Daney
2013-05-07 17:58 ` David Daney [this message]
2013-05-07 17:58   ` David Daney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=518940BB.3080307@caviumnetworks.com \
    --to=ddaney@caviumnetworks.com \
    --cc=david.daney@cavium.com \
    --cc=ddaney.cavm@gmail.com \
    --cc=eunb.song@samsung.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mips@linux-mips.org \
    --cc=liuj97@gmail.com \
    --cc=ralf@linux-mips.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.