[PATCH] Adding limitation while checking for cardTable
Neo Jia
neojia at gmail.com
Mon May 21 06:11:56 UTC 2007
On 5/17/07, Y.S.Ramakrishna at sun.com <Y.S.Ramakrishna at sun.com> wrote:
> Hi Neo -- thanks for finding this problem and
> initiating a fix. I will help shepherd this bug fix via:
>
> 6559052 [OpenJDK] CardTableRS::do_MemRegion() could attempt
> out-of-bounds translation in addr_for()
Ramki,
Just saw the bug from SDN. Thanks.
Neo
>
> -- ramki.
>
> Neo Jia wrote:
>
> > On 5/10/07, Y Srinivas Ramakrishna <Y.S.Ramakrishna at sun.com> wrote:
> >
> >> Hi Neo --
> >>
> >> Thanks for the heads-up. This seems worth fixing, at least
> >> for hygiene, How about the following instead, where we avoid the
> >> addr_for() translation until we are sure it will be safe,
> >> provided that the mr argument to the method is backed by
> >> card table entries. This avoids the need for the
> >> extra compare-and-branch inside the loop in your patch.
> >>
> >
> > Ramki,
> >
> > Thanks. Your fix makes more sense than mine.
> >
> > Neo
> >
> >> void do_MemRegion(MemRegion mr) {
> >> HeapWord* end_of_non_clean = mr.end();
> >> HeapWord* start_of_non_clean = end_of_non_clean;
> >> jbyte* entry = _ct->byte_for(mr.last());
> >> jbyte* first_entry = _ct->byte_for(mr.start());
> >> while (entry >= first_entry) {
> >> jbyte entry_val = *entry;
> >> HeapWord* cur = _ct->addr_for(entry);
> >> if (!clear_card(entry)) {
> >> if (start_of_non_clean < end_of_non_clean) {
> >> MemRegion mr2(start_of_non_clean, end_of_non_clean);
> >> _dirty_card_closure->do_MemRegion(mr2);
> >> }
> >> end_of_non_clean = cur;
> >> start_of_non_clean = end_of_non_clean;
> >> }
> >> start_of_non_clean = cur;
> >> entry--;
> >> }
> >> if (start_of_non_clean < end_of_non_clean) {
> >> MemRegion mr2(start_of_non_clean, end_of_non_clean);
> >> _dirty_card_closure->do_MemRegion(mr2);
> >> }
> >> }
> >>
> >> -- Ramki Ramakrishna
> >>
> >> Neo Jia wrote On 05/09/07 03:31 PM,:
> >>
> >> > hi,
> >> >
> >> > Acturally, the existing code works well although it misses the
> >> > limitation checking, because the current heap layout will make sure
> >> > the memory region checking failed before it goes beyond the limitation
> >> > of byte map.
> >> >
> >> > The reason is that the nursery space is on the lower address, which
> >> > will make its committed card table also on the lower address of inside
> >> > the byte maps. While walking through the card table of the mature
> >> > space and keeping reduce the entry, we will finally hit the boundary
> >> > of its byte map before doing the check of memory region, which will
> >> > fire the assert of the addr_for, if it is on the lower address.
> >> >
> >> > So, just adding more safety for this function.
> >> >
> >> > Thanks,
> >> > Neo
> >> > Index: memory/cardTableRS.cpp
> >> > ===================================================================
> >> > --- memory/cardTableRS.cpp (revision 86)
> >> > +++ memory/cardTableRS.cpp (working copy)
> >> > @@ -163,6 +163,9 @@
> >> > start_of_non_clean = end_of_non_clean;
> >> > }
> >> > entry--;
> >> > + // Adding a limit checking for safety.
> >> > + if (entry < _ct->base_map())
> >> > + break;
> >> > start_of_non_clean = cur;
> >> > cur = _ct->addr_for(entry);
> >> > }
> >> > Index: memory/cardTableRS.hpp
> >> > ===================================================================
> >> > --- memory/cardTableRS.hpp (revision 86)
> >> > +++ memory/cardTableRS.hpp (working copy)
> >> > @@ -101,6 +101,8 @@
> >> >
> >> > CardTableModRefBS* ct_bs() { return &_ct_bs; }
> >> >
> >> > + jbyte * base_map() { return &(_ct_bs._byte_map[0]); }
> >> > +
> >> > // Override.
> >> > void prepare_for_younger_refs_iterate(bool parallel);
> >> >
> >>
> >> --
> >>
> >> ----------------------------------------------------------------------------
> >>
> >> Y. Srinivas Ramakrishna HotSpot JVM
> >> Sun Microsystems, Inc., USCA 14-102 JWS / Software Group
> >> 4140 Network Circle 408 276 7250 (x17250)
> >> Santa Clara, CA 95054, U.S.A. Y dot S dot Ramakrishna at Sun
> >> dot COM
> >> ----------------------------------------------------------------------------
> >>
> >>
> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >>
> >>
> >> NOTICE: This email message is for the sole use of the intended
> >> recipient(s)
> >> and may contain confidential and privileged information. Any
> >> unauthorized
> >> review, use, disclosure or distribution is prohibited. If you are not
> >> the
> >> intended recipient, please contact the sender by reply email and destroy
> >> all copies of the original message.
> >>
> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> >>
> >>
> >>
> >
> >
>
>
--
I would remember that if researchers were not ambitious
probably today we haven't the technology we are using!
More information about the hotspot-gc-dev
mailing list