You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@trafficserver.apache.org by "Mladen Turk (JIRA)" <ji...@apache.org> on 2010/05/26 14:35:54 UTC
[jira] Created: (TS-376) Fix memory alignmet inlies in ink_align.h
Fix memory alignmet inlies in ink_align.h
-----------------------------------------
Key: TS-376
URL: https://issues.apache.org/jira/browse/TS-376
Project: Traffic Server
Issue Type: Bug
Components: Core
Reporter: Mladen Turk
Assignee: Mladen Turk
Fix For: 2.1.1
Alignment code defined in ink_align.h is:
pointer = (char *)(((unsigned long) pointer + widthmask) & (~widthmask));
It is assumed that widthmask parameter is power of two minus one.
The upper math gives wrong results.
Eg.
Aligning memory with the base address of 0x1001 to 512 bytes is done as following in the code:
aligned = align_pointer_forward(base, 511);
This gives resulting address: 0x1200 which is fine
However if the base address was 0x11F0 the resulting address would be 0x1F0 instead 0x1200
Solution is to use the
pointer = (char *)(((unsigned long) pointer + alignment) & ~(alignment - 1));
and use the real alignment numbers in the api instead masked values
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Resolved: (TS-376) Fix memory alignmet inlies in ink_align.h
Posted by "Mladen Turk (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TS-376?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mladen Turk resolved TS-376.
----------------------------
Resolution: Fixed
Resolved by unifying alignment code
> Fix memory alignmet inlies in ink_align.h
> -----------------------------------------
>
> Key: TS-376
> URL: https://issues.apache.org/jira/browse/TS-376
> Project: Traffic Server
> Issue Type: Bug
> Components: Core
> Reporter: Mladen Turk
> Assignee: Mladen Turk
> Fix For: 2.1.1
>
>
> Alignment code defined in ink_align.h is:
> pointer = (char *)(((unsigned long) pointer + widthmask) & (~widthmask));
> It is assumed that widthmask parameter is power of two minus one.
> The upper math gives wrong results.
> Eg.
> Aligning memory with the base address of 0x1001 to 512 bytes is done as following in the code:
> aligned = align_pointer_forward(base, 511);
> This gives resulting address: 0x1200 which is fine
> However if the base address was 0x11F0 the resulting address would be 0x1F0 instead 0x1200
> Solution is to use the
> pointer = (char *)(((unsigned long) pointer + alignment) & ~(alignment - 1));
> and use the real alignment numbers in the api instead masked values
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
[jira] Commented: (TS-376) Fix memory alignmet inlies in
ink_align.h
Posted by "Mladen Turk (JIRA)" <ji...@apache.org>.
[ https://issues.apache.org/jira/browse/TS-376?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12871725#action_12871725 ]
Mladen Turk commented on TS-376:
--------------------------------
We should also axe the int_pointer typedef and just use ptrdiff_t, since int_pointer is used just for aligning the memory
> Fix memory alignmet inlies in ink_align.h
> -----------------------------------------
>
> Key: TS-376
> URL: https://issues.apache.org/jira/browse/TS-376
> Project: Traffic Server
> Issue Type: Bug
> Components: Core
> Reporter: Mladen Turk
> Assignee: Mladen Turk
> Fix For: 2.1.1
>
>
> Alignment code defined in ink_align.h is:
> pointer = (char *)(((unsigned long) pointer + widthmask) & (~widthmask));
> It is assumed that widthmask parameter is power of two minus one.
> The upper math gives wrong results.
> Eg.
> Aligning memory with the base address of 0x1001 to 512 bytes is done as following in the code:
> aligned = align_pointer_forward(base, 511);
> This gives resulting address: 0x1200 which is fine
> However if the base address was 0x11F0 the resulting address would be 0x1F0 instead 0x1200
> Solution is to use the
> pointer = (char *)(((unsigned long) pointer + alignment) & ~(alignment - 1));
> and use the real alignment numbers in the api instead masked values
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.